VIFによる変数選択
重回帰分析をやっていると、多重共線性(マルチコ)ので変数選択が必要になりますが、評価指標として分散拡大係数:Variance Inflation Factorというものがあるそうで。
numpyで直接計算する。
corr_mat = np.array(df.corr()) inv_corr_mat = np.linalg.inv(corr_mat) pd.Series(np.diag(inv_corr_mat), index=df.columns)
statsmodelsを使う。
import statsmodels.api as sm xx = df.drop('目的変数',axis=1) yy = df['目的変数'] x_add_const = sm.add_constant(xx) model_sm = sm.OLS(yy, x_add_const).fit() print(model_sm.summary()) from statsmodels.stats.outliers_influence import variance_inflation_factor as vif num_cols = model.exog.shape[1] vifs = [vif(model.exog, i) for i in range(0, num_cols)] pd.DataFrame(vifs, index=model.exog_names, columns=['VIF'])
参考にしました
pythonのstatsmodelsを使った重回帰分析で溶解度予測:AICによるモデル選択 | 化学の新しいカタチ
Python(StatsModels) で重回帰分析を理解し、分析の精度を上げる方法 | たぬハック
VIFを利用した減少法による変数選択法in Python | βshort Lab