おれの財宝か?
欲しけりゃくれてやるぜ
探してみろ
この世の全てをそこに置いてきた
世は大海賊時代を迎える……
© ONE PIECE/尾田栄一郎/集英社/東映アニメーション
おれの財宝か?
欲しけりゃくれてやるぜ
探してみろ
老後資金の全てをそこに置いてきた
余は大後悔時代を迎える……
ダブルインバースの長期保有でワヤ!!
今の世はデータ分析時代!
でも「分析」という言葉の使い方を間違って使ってない?
用語 | 意味 |
---|---|
整理 | 「この」データはどういう特徴かを限定的に明らかにすること |
可視化 | 見えにくいものを見やすい状態にすること |
分析 | データから得られたものの意味するところ(「一般性」が導き出せるか)を明らかにすること |
考察 | 「分析」から得られた結果を元に、論理的に新たな知見を創出していくこと |
単なる可視化ソフトを「分析ツール」として謳っている企業様の展示会で言い争いになったこともあるわww
「どうしても説明させてくれ」と言われたから聞いたのに「分析」と「可視化」の違いすら知らない説明員なんだもん。
裏から偉い人が出てきて謝罪されたわww
機械学習を使ったからって「分析」している訳じゃないと思う。
「分析」という言葉の重みが年々チープになっている感じを受けるわーー。
完全に乗り遅れた「J-Quants データ分析コンペティション」。
まぁ当時知っていても何か理由をつけて参加しなかったかも知れないけどね……。
結果発表だけはライブで見た。ブログ記事を書いて3ヶ月以上経過してしまったが公開しておく。
J-Quants データ分析コンペティション上位者解法
J-Quants データ分析コンペティション表彰式のドキュメントとソースコードが公開された。
表彰式の模様や上位入賞者による解説も、YouTubeで公開されている。
コンペで提供されたデータがないと実行できないが、データはコンペルールにより共有不可でかつ削除済みである。
とはいえ、いつか機械学習での開発で参考になると思うので、賢人様の手法・特徴量をまとめておく。
【1位】望月正弘氏(DeNA社員 SIGNATE Grandmaster)
- 学習器:LightGBM+lambdaRank
銘柄情報
- 会計基準のカテゴリ
- 決算種別のカテゴリ
- 業績予想の決算種別のカテゴリ
- 会社区分のカテゴリ
- 市場・商品区分のカテゴリ
- 33業種区分/17業種区分のカテゴリ
- TOPIXニューインデックスシリーズ規模区分
テクニカル
- 起点日から過去5/10/20日以内の最高値/最安値への変動率
- 取引所公式終値の20/40/60/120営業日前からの変化率
- 取引所公式終値の過去20/40/60/120営業日間かからの変化率
- 取引所公式終値の20/40/60/120日移動平均からの乖離率
- 起点日の最高値と最安値の対数の比の20/40/60/120日移動平均
ファンダメンタルズ
- 総資産/純資産/営業キャッシュフロー/財務キャッシュフロー/投資キャッシュフロー/売上/営業利益/経常利益/純利益の前年同期比
- 四半期あたりの売上高/営業利益/経常利益/純利益の前年同期比
- 季節調整済みの四半期あたりの売上高/営業利益/経常利益/純利益の前年同期比
- 業績予想の売上高/営業利益/経常利益/純利益の前年同期比
- 四半期PER/季節調整済み四半期PER/業績予想に基づくPER
- 四半期ROE/季節調整済み四半期ROE/業績予想に基づくROE
- PBR
- 当該時点での全銘柄の時価総額の合計に対する当該銘柄の時価総額/売買代金/純資産/総資産の比
- 配当利回り
- 配当性向
- 配当基準日/予想配当基準日から起点日までの日数
【2位】UKI氏(現役トレーダー)
プレゼン中に回答しきれなかった内容もQiitaにまとめている徹底ぶり。
- 特徴量:182特徴量(価格系63、財務指標系119)
- market_cap(時価総額)
- PER(株価収益率)
- PBR(株価純資産倍率)
- ROE(自己資本利益率)
- profit_margin(売上高純利益率、単に純利益率)
- equity_ratio(自己資本比率)
- 学習器:XGBRegressor(max_depth=6, learning_rate=0.01, n_estimators=3000, colsample_bytree=0.1)
価格データ
- 終値
- 騰落率
- 売買代金平均
- 売買代金乖離率
- ATR(Average True Range)
- ATR乖離率
- ATR(ギャップ部)
- ATR(胴体部)
- ATR(ヒゲ部)
- ボラティリティ(標準偏差)
- 高値安値バンド
- 流動性
財務データ
ダミー
- 本決算フラグ、訂正フラグ
raw特徴量
- 売上高/営業利益/経常利益/純利益
- 各コスト(上の指標の差分)
- 総資産、純資産
- キャッシュフロー(営業/財務/投資)
ratio特徴量
- 売上高利益率(純利益/経常/営業)
- ROE(純利益/経常/営業)
- ROA(純利益/経常/営業)
- 売上高コスト率
- 売上高回転率
- 財務健全性
- 総資本CF比率
diff特徴量
- raw特徴量の前期差分
- ratio特徴量の前期差分
- raw特徴量とratio特徴量のうち、実績と予想の差分が取れるもの
ATR(ボラ予測)とProfit Margin(方向予測)が上位を占めるため、両輪が必要。
主な財務指標は自作して求めている。
1 2 3 4 5 6 7 8 9 |
# 財務指標の作成 tmp_df["market_cap"] = tmp_df["close"]*tmp_df["share"] tmp_df["per"] = tmp_df["close"]/(tmp_df["Result_FinancialStatement NetIncome"]*1000000/tmp_df["share"]) tmp_df["per"][tmp_df["Result_FinancialStatement CashFlowsFromOperatingActivities"] == 0] = np.nan tmp_df["pbr"] = tmp_df["close"]/(tmp_df["Result_FinancialStatement NetAssets"]*1000000/tmp_df["share"]) tmp_df["roe"] = tmp_df["pbr"]/tmp_df["per"] tmp_df["profit_margin"] = tmp_df["Result_FinancialStatement NetIncome"]/tmp_df["Result_FinancialStatement NetSales"] tmp_df["profit_margin"][tmp_df["Result_FinancialStatement CashFlowsFromOperatingActivities"] == 0] = np.nan tmp_df["equity_ratio"] = tmp_df["Result_FinancialStatement NetAssets"]/tmp_df["Result_FinancialStatement TotalAssets"] |
また財務指標の前処理で、業種の違いにより純利益率のギャップが出るので業種毎に正規化することで業種を隔てた比較を可能にしている。
なお、UKI氏は次のQiitaで他の指標に関しての取得方法にも言及している。
- Total Revenue(売上高)
- Operating Income(営業利益)
- Net Income(当期純利益)
- Total Assets(総資産)
- Total Liab(総負債)
- Total Stockholder Equity(自己資本)
- Total Cashflows From Operating Activities(営業キャッシュフロー)
- Total Cashflows From Financing Activities(財務キャッシュフロー)
- Total Cashflows From Investing Activities(投資キャッシュフロー)
- marketCap(時価総額)
- sharesOutstanding(発行株数)
- forwardPE(予測PER)
- dividendYield(配当利回り)
- profitMargins(純利益比率)
- 為替
- 世界の主要株価指数
- ROE→算出
- PER→算出(EPS(一株益)が必要)
- EPS→算出(当期純利益、自己資本、発行株数)
【3位】谷合廣紀氏(プロ棋士+YouTuber)
- ⽣データはファンダメンタル情報と株価情報で思いつくだけ特徴量を作成
- 学習器:LightGBM+Optuna
ファンダメンタル特徴量
⼀般的な財務指標
- PER/PBR/ROE/時価総額/純利益率/⾃⼰資本⽐率…
それぞれの財務指標の変化率
- 前期と⽐べて純利益率がどれだけ増加したか/減少したか
- 前期の予測PERと当期の実際のPERとのずれはどのくらいか
業種で正規化した財務指標
- 財務指標は業種の中での相対値が重要
- 銘柄の17業種/33業種区分の平均値で割って正規化
株価特徴量
直近n(1, 2, 3, 4, 5, 10, 20, 40, 60, 80, 120, 240)営業⽇における各銘柄/⽇経平均の株価の
- リターン
- ボラティリティ
- 移動平均線との乖離率など
- 最⾼値/最安値
決算発表⽇翌⽇の制限値幅
- 予測する最安値の分布の最⼤値は、制限値幅の最⼤値に依存
業種や⽇経平均で正規化した株価
高値予測では「ボラティリティ」「決算発表日の安値/高値」「総資産、純資産」「純利益率の来期予想」が重要。
安値予測では「ボラティリティ」「日経平均のボラティリティ」「日経平均の最安値」「純利益率の変化率」が重要。
【4位】y.ume氏
atmaCup などデータコンペに積極的に参加されている人のようだ。
- テクニカル
- 20,40,60営業日のそれぞれについて、リターン、ボラティリティ、移動平均との乖離率、(最大-最小)/標準偏差、騰落率の平均、騰落率の標準偏差、騰落幅の標準偏差/平均、RSI
- MACD
- ファンダメンタル
- ROE, ROA, EPS, PER, BPS, PBR, 配当性向、四半期ごとの修正回数、
- 前四半期との差分(売上高、営業利益、経常利益、当期純利益、総資産、純資産、一株当たり四半期配当金、一株当たり年間配当金累計)
【10位】nakayasu氏
5位以降のソースコードはコメントも少なく何の特徴量なのか全く分からなかった。
10位の方はチームで応募したようだがコメントが詳細に書かれていたので特徴量を列挙しておく。
- 学習器:LightGBM
特徴量
- 騰落幅
- 前回終値と直近約定値の価格差
- 過去0,5,10,15,20日前の株価、出来高
- 発行済株式数
- 銘柄の33業種区分(コード)
- 銘柄の17業種区分(コード)
- 来期の予測EPS(1株あたりの利益)
- 来期の予測PER(株価収益率)
- 売買高加重平均価格(VWAP)
- 来期の予想決算売上高増加率
- 売上高増加率
- 営業利益増加率
- 経常利益増加率
- BPS(1株あたりの純資産)
- PBR(株価純資産倍率)
- CFPS(1株あたりのキャッシュフロー)
- PCFR(株価キャッシュフロー倍率)
- 来期の予測配当利回り
- 時価総額
- キャッシュフローマージン
- 高値と安値の5日間の差額の平均
- 5日間平均から当日株価を引く
- 売上高に対しての負債割合
- 負債増加率
- 終値の20営業日/40営業日/60営業日ボラティリティ
- 終値の20営業日リターン
- 来期の予想決算営業利益増加率
- 負債比率
- 利益率
- 利益率増加率
- 自己資本比率
- 純利益増加率
- EPS(1株当たり利益)
- PER(株価収益率)
- 目標株価
まとめ
1位、2位、3位の発表者は巷では有名な人々で、キャラも非常に濃かった。
結局、題材が株式投資であっても
機械学習のエンジニアが強い
ということを証明されただけだわ……。