【コラム】AIを使ってIPOの初値を予測する

 IPO初値を予想するには、事業の内容やIPOの規模、価格設定などから予想していくことになりますが、必ずしも適正な初値水準というのがあるわけではありません。過去に上場した類似のIPOの初値は参考値として有用ではありますが、それでも全く同じ条件のIPOは存在しません。

 ここでは、過去のIPOの初値データをもとに、「AI(機械学習)」を利用して、初値の予測モデルを構築していきます

1AIと機械学習

 AIを使って予測モデルを構築する前に、簡単にAIについて確認しておきましょう。

AIとは 

 AIは「Artificial Intelligence(アーティフィシャル・インテリジェンス)」の略で、日本語では「人工知能」と訳されます。一般的に、人間と同じように学習や認識、判断するようなコンピューターのことを指す場合が多いですが、明確な定義があるわけではありません

 また、AIを語る上でよく使われる言葉に「機械学習(Machine Learning)」があります。機械学習は、データから一定の規則(パターン)や法則(ルール)を、コンピュータ自身が抽出する技術のことをいいます。つまり、AIは広義の概念であり、機械学習はAIが稼働するための必要な要素の1つといえます

機械学習の種類 

 機械学習では、データから規則性や判断基準を学習し、それに基づき未知のものを予測、判断していくことになります。また、機械学習には、「教師あり学習」「教師なし学習」「強化学習」の3種類の方法があります。

 IPOの初値を予測するモデルでは、特に「教師あり学習」で分析を進めていくことになります。

2予測モデルの構築

 今回は機械学習のオープンソースライブラリである「scikit-learn」を使用してモデルを構築していきます。scikit-learnは、Pythonの機械学習ライブラリで、誰でも無料で利用することができます。また、プログラムを実行するツールとして、機械学習ではおなじみの「Jupyter Notebook」を利用します。

 データ解析と予測については、大きく5つのステップに分けて進めていきます。

データの取得 

 今回使用するデータは、2008年1月から2021年6月の間に上場した企業の初値データ890件のうち、初値騰落率が全体の平均から(標準偏差の2倍)以上離れた45件を除く、845件のデータとしました。また、データの中身は、以下の構成としています

データ説明
OP公開価格(円)※上場時の単元数は100株に統一
MSIPO規模(投資家の資金供給額(億円)
POR募集株数における公募株数の割合(%)
EPS1株あたり利益(円)
BPS1株あたり純資産(円)
SGR直近の売上高成長率(%)
ROE直近の自己資本利益率(%)
GA類似グループの平均初値騰落率(%)
RA直近(上場承認日時点)の平均初値騰落率(%)
PD想定価格と公開価格の乖離率(%)
OSP初値(円)

 これらのデータをJupyter Notebookにインポートします。

  1. # データをインポート
  2. import pandas as pd
  3. import io
  4. df = pd.read_csv(io.StringIO(uploaded[‘ipo-data(2008-2021.6).csv’].decode(‘utf-8’)))

データの分割 

 インポートしたデータについて、目的変数特徴量を定義します。今回予測したいデータは初値になるので「OSP」が目的変数、それ以外が特徴量となります。また、845件のデータを訓練用テスト用のデータに分割します。今回は、それぞれ8:2の割合で分割しています。

  1. # 変数の組み合わせ
  2. X_train = train[[“OP”,”MS”,”POR”,”EPS”,”BPS”,”SGR”,”ROE”,”GA”,”RA”]]
  3. Y_train = train[“OSP”]
  4. X_test = test[[“OP”,”MS”,”POR”,”EPS”,”BPS”,”SGR”,”ROE”,”GA”,”RA”]]
  5. Y_test = test[“OSP”]
  6.  
  7. # 訓練用とテスト用に分割
  8. from sklearn.model_selection import train_test_split
  9. train, test = train_test_split(df,test_size=0.2,random_state=100)

モデルの作成 

 機械学習のモデルには、重回帰ランダムフォレストなど、いろいろな学習モデルがありますが、ここでは、複数のモデルを融合させて1つの学習モデルを生成する「アンサンブル学習」で予測モデルを作成していきます。今回は、XGboostランダムフォレスト重回帰の3つのモデルのアンサンブルで学習を行います。なお、学習で使うデータは訓練用のデータになります。

  1. # モデルの作成
  2. reg1 = xgb.XGBRegressor(colsample_bytree=1.0,eta=0.01,gamma=1,max_depth=7,min_child_weight=1,subsample=0.8)
  3. reg2 = RandomForestRegressor(random_state=1,n_estimators=100)
  4. reg3 = LinearRegression(normalize=True)
  5. ereg = VotingRegressor(estimators=[(‘xgb’,reg1),(‘rf’,reg2), (‘lr’,reg3)])
  6.  
  7. ereg = ereg.fit(X_train, Y_train)

モデルの評価 

 作成したモデルについて、テスト用のデータを使って予測精度を評価していきます。ここでは、決定係数(R2)平均誤差率を計算します。なお、決定係数は、0〜1の範囲の値をとり、値が1に近いほど予測精度が高いモデルということになります。結果を見ると、訓練用データの決定係数は93.7%、テスト用データでは84.5%と乖離は小さく、予測モデルとしてはまずまずの精度といえます。また、この予測モデルの誤差率は18.6%となっています。

  1. # 評価指標
  2. yhat_test = model.predict(X_test)
  3. return
  4. “adjusted_r2(test):” + str(adjusted_r2(X_test,Y_test,model)),
  5. “平均誤差率(test):” + str(np.mean(abs(Y_test / yhat_test – 1)))

 また、テスト用データを使って、実際の初値とモデルが予測した初値がどれほど一致しているかグラフでも確認してみます。(横軸:実際の初値縦軸:モデルが予測した初値

  1. # グラフ描画
  2. plt.figure()
  3. ax = sns.regplot(x=Y_test, y=ereg.predict(X_test), fit_reg=False,color=’#4F81BD’)
  4. ax.set_xlabel(u”opening share price”)
  5. ax.set_ylabel(u”(Predicted) opening share price”)
  6. ax.get_xaxis().set_major_formatter(ticker.FuncFormatter(lambda x, p: format(int(x), ‘,’)))
  7. ax.get_yaxis().set_major_formatter(ticker.FuncFormatter(lambda y, p: format(int(y), ‘,’)))
  8. ax.plot([0,10,20,30,40,50],[0,10,20,30,40,50], linewidth=2, color=”#C0504D”,ls=”–“)

モデルの利用 

 最後に、構築したモデルをもとに2021年7月に上場予定のランドネットの初値を予測してみます。なお、予測時点で公開価格が決定していない場合は、想定価格と公開価格は同じ価格とみなして予測します。

  1. # 初値予測の実行
  2. submission = pd.DataFrame({
  3. ‘Prediction(OSP)’: ereg.predict(X_df2)})

 今回構築したモデルによると、ランドネットの初値は5,510円と予測されました。

関連記事

セカンダリー

24年1月以降のIPO銘柄

(24/11/18 15:00)

銘柄
(上場日)
現在値
(初値)
初値比
(金額差)
地合い
インターメス
262A(10/18)
2,503
2,038
+ 22.8
+ 465
日水コン
261A(10/16)
1,374
1,341
+ 2.5
+ 33
オルツ
260A(10/11)
500
570
- 12.3
- 70
ケイ・ウノ
259A(10/8)
1,289
2,134
- 39.6
- 845
シマダヤ
250A(10/1)
1,414
1,760
- 19.7
- 346
Aiロボティクス
247A(9/27)
2,700
2,514
+ 7.4
+ 186
アスア
246A(9/26)
802
1,004
- 20.1
- 202
キッズスター
248A(9/26)
1,560
2,210
- 29.4
- 650
INGS
245A(9/26)
2,326
2,700
- 13.9
- 374
グロースエクスパ
244A(9/26)
2,458
1,841
+ 33.5
+ 617
リプライオリ
242A(9/25)
1,040
1,398
- 25.6
- 358
ROXX
241A(9/25)
1,210
1,941
- 37.7
- 731
CrossE
231A(8/29)
871
1,085
- 19.7
- 214
オプロ
228A(8/21)
1,363
1,673
- 18.5
- 310
ファベル
220A(7/31)
922
1,190
- 22.5
- 268
ハートシード
219A(7/30)
1,301
1,548
- 16.0
- 247
リベラウェア
218A(7/29)
421
454
- 7.3
- 33
タイミー
215A(7/26)
993
1,850
- 46.3
- 857
フィットイージー
212A(7/23)
1,599
1,213
+ 31.8
+ 386
カドス
211A(7/18)
2,615
3,210
- 18.5
- 595
PRISMBio
206A(7/2)
310
489
- 36.6
- 179
ロゴスHD
205A(6/28)
2,195
2,290
- 4.1
- 95
豆蔵デジタルHD
202A(6/27)
1,202
1,348
- 10.8
- 146
MFS
196A(6/21)
348
368
- 5.4
- 20
タウンズ
197A(6/20)
565
430
+ 31.4
+ 135
ポストプライム
198A(6/20)
713
450
+ 58.4
+ 263
WOLVES
194A(6/20)
787
875
- 10.1
- 88
ライスカレー
195A(6/19)
742
1,560
- 52.4
- 818
インテグループ
192A(6/18)
3,290
5,940
- 44.6
- 2,650
Chordia
190A(6/14)
208
255
- 18.4
- 47
D&Mカンパニー
189A(6/11)
835
1,308
- 36.2
- 473
アストロスケール
186A(6/5)
1,011
1,281
- 21.1
- 270
学びエイド
184A(5/28)
556
1,282
- 56.6
- 726
コージンバイオ
177A(4/25)
1,757
2,030
- 13.4
- 273
レジル
176A(4/24)
1,580
1,205
+ 31.1
+ 375
ウィルスマート
175A(4/16)
849
1,580
- 46.3
- 731
ハンモック
173A(4/11)
1,430
2,160
- 33.8
- 730
イタミアート
168A(4/8)
929
2,000
- 53.6
- 1,071
アズパートナーズ
160A(4/4)
1,779
2,923
- 39.1
- 1,144
Gモンスター
157A(3/29)
546
1,700
- 67.9
- 1,154
マテリアルG
156A(3/29)
600
1,085
- 44.7
- 485
カウリス
153A(3/28)
1,606
2,875
- 44.1
- 1,269
情報戦略
155A(3/28)
547
1,021
- 46.4
- 474
シンカ
149A(3/27)
695
1,671
- 58.4
- 976
ダイブ
151A(3/27)
2,740
3,225
- 15.0
- 485
コロンビアW
146A(3/27)
3,500
3,745
- 6.5
- 245
エルイズビー
145A(3/26)
690
1,553
- 55.6
- 863
ソラコム
147A(3/26)
1,091
1,563
- 30.2
- 472
ハッチ・ワーク
148A(3/26)
2,341
2,815
- 16.8
- 474
JSH
150A(3/26)
546
893
- 38.9
- 347
イシン
143A(3/25)
931
2,234
- 58.3
- 1,303
STG
5858(3/21)
2,349
3,215
- 26.9
- 866
ジンジブ
142A(3/22)
676
3,980
- 83.0
- 3,304
トライアル
141A(3/21)
2,954
2,215
+ 33.4
+ 739
光フードサービス
138A(2/28)
2,202
5,850
- 62.4
- 3,648
Cocolive
137A(2/28)
1,053
3,990
- 73.6
- 2,937
VRAIN
135A(2/22)
1,930
5,190
- 62.8
- 3,260
VIS
130A(2/8)
881
2,001
- 56.0
- 1,120
SOLIZE
5871(2/7)
1,638
2,020
- 18.9
- 382

一覧へ

アーカイブ
にほんブログ村 株ブログへ
ページ上部へ戻る