ちょうど良い説明変数の情報量とAIモデルの構造を知りたい
ちょうど良い説明変数の情報量とAIモデルの構造を知ることが重要
これまでのAIモデルに対する検証に基づき、私がたどり着いた結論は以下の通りです。
株価に基づき何かを予測するAIモデルは、説明変数の情報量が多すぎても、AIモデルの表現能力が高すぎても過学習となる
つまり、ちょうど良い説明変数の情報量とAIモデルの構造を知ることが重要である
AIモデルの表現能力は、その構造に基づきます。
ちょうど良い説明変数の情報量とAIモデルの構造を知る方法について、具体的な手法をChatGPTに尋ねたところ、下記の回答を得ました。
適切な説明変数の情報量を探すための手法
1. 特徴量重要度の確認(モデル駆動型アプローチ)
● 既存の学習済みモデルを使い、特徴量の重要度を確認
2. 特徴量アブレーション(除去検証)
● 一つずつ特徴量を抜き、性能がどう変わるか検証する方法
3. 次元削減(PCA・AutoEncoder)
● 特徴量を低次元に圧縮し、本質的な情報だけ残す
4. 相関行列による冗長削除
● 相関係数が0.9以上の説明変数を片方削除
適切な表現能力を有するAIモデルの構造を探す手法
1. モデル容量スイープ(グリッド探索)
● モデルのサイズを体系的に変えて性能を検証
2. 正則化パラメータの最適化
● Dropout・L2正則化
3. シンプルなモデルを積極的に検証
● Logistic回帰・決定木・ランダムフォレスト
4. EarlyStoppingの活用
● 最適エポックでの早期停止により過学習を防ぐ
5. ドロップアウトとバッチ正規化の組み合わせ
● Dropoutでモデルをランダムに弱くしつつ、BatchNormalizationで学習を安定させる
ChatGPTの回答には、様々なレベルの内容が含まれていますが、私が気になったのは、以下に挙げたものです。
適切な説明変数の情報量を探すための手法に関して
3. 次元削減(PCA・AutoEncoder)
4. 相関行列による冗長削除
適切な表現能力を有するAIモデルの構造を探す手法に関して
3. シンプルなモデルを積極的に検証
また、次元削減と相関行列による冗長削除の内容が分からなかったので、ChatGPTに確認しました。
ChatGPTからの内容をまとめると、以下の通りです。
PCA(主成分分析)について
例えば、説明変数AとBをまとめて主成分1として表現する
主成分1の値については理解できない
全部の特徴量を組み合わせた新しい軸を作る手法
AutoEncoderについて
例えば、説明変数AとBの情報が似ていれば自動で圧縮する
どの説明変数が冗長だったのかは分からない
説明変数の情報を圧縮して別の表現に変える手法
相関行列について
例えば、説明変数AとBで高い相関関係にあれば、説明変数AかBの何れかを削除する
PCAとAutoEncoderは、基となる説明変数の値を別の情報に置き換えることになります。
ですが、私の希望としましては、説明変数の値はそのまま使用したいです。
このため、相関行列を使用した適切な説明変数の情報量の導出が、私の希望にピッタリであると考えます。
相関行列の導出方法
ChatGPTによると、Python環境で相関行列を算出するには、DataFrame型の行列に対してcorr()関数を実行すれば良いことが分かりました。
corr()関数について調べた結果は、以下の通りです。
DataFrame.corr(method, min_periods, numeric_only)
method(string or 関数)
pearson: ピアソンの積率相関係数(デフォルト値)
kendall: ケンドールの順位相関係数
spearman: スピアマンの順位相関係数
関数を指定
min_periods(int)
列のペアごとに必要な観測値の最小数
pearson相関とspearman相関でのみ使用可
デフォルト値: 1
numeric_only(bool)
float, int, bool データのみを含める
デフォルト値: True
ピアソンの積率相関係数の算出式は、下記となります。
2つの列$${X}$$と$${Y}$$からなるn行2列の行列があると仮定します。
それぞれのデータポイントを$${x_i}$$と$${y_i}$$とします($${i}$$は各列の行インデックス)。
ピアソンの積率相関係数$${r_{xy}}$$は、以下の式で表されます。
$$
r_{xy} = \frac{\sum^n_{i=1}(x_i - \overline{x}) (y_i - \overline{y})}{\sqrt{\sum^n_{i=1}(x_i - \overline{x})^2} \sqrt{\sum^n_{i=1}(y_i - \overline{y})^2}}
$$
$${ \overline{x}}$$は、列$${X}$$の平均値
$${ \overline{y}}$$は、列$${Y}$$の平均値
Geminiによるピアソンの積率相関係数に対する説明は、以下の通りです。
分子は共分散を表す
二つの積を足し合わせることで二つの変数が同じ方向に動く傾向が強いか、逆方向に動く傾向が強いかを見ることができる
分母は標準偏差の積を表す
標準偏差とは、データのバラつきの大きさを表す
共分散(分子)を標準偏差の積(分母)で割ることで、正規化を行う
仮に、a行b列の行列に対して、corr()関数を実行すると、b行b列の行列が得られます。
何となくですが、分かった気がしました。
次回は、幾つかの説明変数のパターンに対して、相関行列を算出し、状況を把握したいと思います。
