前置き
どうも、KOです。いつも見ていただき、ありがとうございます。
ずっと金融のラベリングの話ばかりしていて、投資家であるならば、投資戦略を考えた上で、投資戦略を分析するためにはどうすれば良いのかについて考えている方も多いと思います。
多くの投資家は、先に市場を分析して投資戦略を考える方が多いと思いますが、こちらでは逆で、金融の機械学習では、投資戦略を考えてから市場にフィッティングさせる方が一般的だと思います。(一般的とか言って私だけに当てはまるのかもしれませんが(笑)
参考文献はこちらになります。
特徴量の考え方の基本
まず、投資戦略を一つ決め、ラベリングをします。そして、バックテストをします。
実は、これは何もしていないんですね。ここで良い成績が出たからといって、それがたまたまかもしれないですし、実際に運用するには考えなきゃいけないことは、「この戦略が将来でも通用するのか」だと思います。
つまり、バックテスト自体は成績を保証するものではなく、ただ単に過去の市場における投資戦略を表示しているに過ぎないんですね。
ここで重要な論理関係について説明しましょう。
「常に利益が出る戦略」⇒「過去でもその戦略は利益が出ている」
この論理関係は正しいですが、逆は明らかに成り立ちません。
厳しいことを言っているように聞こえますが、実務で応用するには、この原理を踏まえて分析をする必要があります。
つまり、特徴量とは投資戦略をよりマーケットにフィッティングさせるための変数であると考えています。鬼に金棒の金棒ってことですね。
特徴量エンジニアリングにおける定義
インサンプル(In sample):訓練データ
アウトオブサンプル(Out of sample):テストデータ
代替効果(substitution effect):ある特徴量の推定重要度が他の関連する特徴量の存在によって削減されるときに生じる効果のこと。
代替効果による特徴量重要度
平均不純度減少量(Mean Decrease Impurity)
MDI(:=Mean Decrease Impurity)は、ランダム木(:=RF)のようなツリーベース分類器特有のインサンプルで説明上での重要度を図る方法である。
つまり、RFのfeature_importanceがたくさんあったときにどのように特徴量を見つけるかどうかである。
先にMDIの手法についてコードを通して解説する。
def featImpMDI(fit, featNames):
df0 = {i: tree.feature_importances_ for i, tree in enumerate(fit.estimators_)}
df0 = pd.DataFrame.from_dict(df0, orient='index')
df0.columns = featNames
df0 = df0.replace(0, np.nan)
imp = pd.concat({'mean':df0.mean(), 'std':df0.std()*df0.shape[0]**-.5}, axis=1)
imp /= imp['mean'].sum()
return imp
まずいくつかの特徴量を用意します。
ここで、このメソッドの中では、最初の4行は既にフィットしたモデルから、model.feature_importances_
をデータフレーム化しています。
ランダム木なので、大量の木それぞれに対して特徴量の重要性が計算されています。
ここで、0
と表示されてしまった特徴量に対してはnp.nan
にします。これは特徴量の重要度の最大値を1
にするためです。
あとは、行方向(axis=1)に対して平均と標準偏差を計算し、それを平均特徴量として出力します。
以下にランダム木を使用したことない方に基本的な使い方を紹介します。
from sklearn.ensemble import RandomForestClassifier as RF
model = RF(max_features=1)
model.fit(X_train, y_train)
model.feature_importances_
ランダム木のパラメーターの選び方
-
マスキング効果(分類気がある特徴量をシステマティックに無視し、他の特徴量を重視することである。)を回避するために、
max_features = int(1)
とする。そうすることにより、階層ごとにランダムな1つの特徴量のみが選択される。 -
この手法はインサンプルでのみ用いるべきである。たとえ、ここで予測力が全くなかったとしても、全ての特徴量はある程度の重要度をもつことになる。
-
MDIをツリーベース以外の分類器に対して一般化し、適用することは出来ない。
-
構造上、MDIには特徴量重要度の合計が1になり、各重要度は0から1の間になる。
-
この手法は、相関を持つ特徴量が存在する際の代替効果を考慮していない。つまり、同じ特徴量が2つあれば重要度は半分になるので気を付けるように。これは結構重要な話なので、将来別の記事で書きたい。
-
いくつかの予測変数に偏ることがある。単一の決定木においては、この偏りは一般的な不純度関数が多くのカテゴリを持つ予測変数を不公平に重視することによってもたらされている。(Strobl et al.[2007])
結論
今回は金融における特徴量の位置づけや予測における気を付けるべきことを紹介させていただいた。
特徴量の評価方法で投資戦略にどのように貢献させるか等についても技術的な話になるので、今後ゆっくり紹介していきたいと思う。