2つの数値説明変数

statsmodels を使った中級 Regression

Maarten Van den Broeck

Content Developer at DataCamp

3つの数値変数を可視化する

  • 3D散布図
  • 応答変数を色で表す2D散布図
statsmodels を使った中級 Regression

fish データセットの別の列

species massg lengthcm height_cm
Bream 1000 33.5 18.96
Bream 925 36.2 18.75
Roach 290 24.0 8.88
Roach 390 29.5 9.48
Perch 1100 39.0 12.80
Perch 1000 40.2 12.60
Pike 1250 52.0 10.69
Pike 1650 59.0 10.81
statsmodels を使った中級 Regression

3D散布図

すべての魚種を長さ、質量、高さの軸でプロットした3D散布図です。2D平面では解釈が困難です。

statsmodels を使った中級 Regression

2D散布図、応答変数を色で表す

sns.scatterplot(x="length_cm", 
                y="height_cm",
                data=fish,
                hue="mass_g")

質量を色で表し、3つ目の数値変数を可視化した2D散布図です。

statsmodels を使った中級 Regression

2つの数値説明変数によるモデリング

mdl_mass_vs_both = ols("mass_g ~ length_cm + height_cm",
                       data=fish).fit()

print(mdl_mass_vs_both.params)
Intercept   -622.150234
length_cm     28.968405
height_cm     26.334804
statsmodels を使った中級 Regression

予測の流れ

from itertools import product

length_cm = np.arange(5, 61, 5)
height_cm = np.arange(2, 21, 2)

p = product(length_cm, height_cm)

explanatory_data = pd.DataFrame(p,
                                columns=["length_cm",
                                         "height_cm"])
prediction_data = explanatory_data.assign(
  mass_g = mdl_mass_vs_both.predict(explanatory_data))
print(prediction_data)
     length_cm  height_cm       mass_g
0            5          2  -424.638603
1            5          4  -371.968995
2            5          6  -319.299387
3            5          8  -266.629780
4            5         10  -213.960172
..         ...        ...          ...
115         60         12  1431.971694
116         60         14  1484.641302
117         60         16  1537.310909
118         60         18  1589.980517
119         60         20  1642.650125

[120 rows x 3 columns]
statsmodels を使った中級 Regression

予測値をプロットする

sns.scatterplot(x="length_cm",
                y="height_cm",
                data=fish,
                hue="mass_g")
sns.scatterplot(x="length_cm",
                y="height_cm",
                data=prediction_data,
                hue="mass_g",
                legend=False,
                marker="s")
plt.show()

魚の長さ、高さ、質量を示す散布図に予測グリッドを重ねたものです。

statsmodels を使った中級 Regression

交互作用を含める

mdl_mass_vs_both_inter = ols("mass_g ~ length_cm * height_cm",
                             data=fish).fit()
print(mdl_mass_vs_both_inter.params)
Intercept              159.107480
length_cm                0.301426
height_cm              -78.125178
length_cm:height_cm      3.545435
statsmodels を使った中級 Regression

交互作用を含めた予測の流れ

length_cm = np.arange(5, 61, 5)
height_cm = np.arange(2, 21, 2)

p = product(length_cm, height_cm)

explanatory_data = pd.DataFrame(p,
                                columns=["length_cm",
                                         "height_cm"])

prediction_data = explanatory_data.assign(
  mass_g = mdl_mass_vs_both_inter.predict(explanatory_data))
statsmodels を使った中級 Regression

予測値をプロットする

sns.scatterplot(x="length_cm",
           y="height_cm",
           data=fish,
           hue="mass_g")

sns.scatterplot(x="length_cm",
                y="height_cm",
                data=prediction_data,
                hue="mass_g",
                legend=False,
                marker="s")
plt.show()

魚の長さ、高さ、質量を示す散布図に、交互作用項を含む予測グリッドを重ねたものです。

statsmodels を使った中級 Regression

練習しましょう!

statsmodels を使った中級 Regression

Preparing Video For Download...