【初心者向け】回帰モデルの自前データで止まっている人向け(statsmodels(第2回目))

### 【初心者向け】回帰モデルの自前データで止まっている人向け(statsmodels(第2回目))
ほぼ、備忘録

**<font color=blue>サンプルデータで止まっている人向け、statsmodels(OLS)入門</font>**

statsmodelsで回帰のサンプルをやってみて、自分で作ったデータで止まっている人向けの入門記事です。

このスクリプトで想定しているケースは、架空の飲食店(バーやスカイラウンジーの想定)で、商品の大分類や客単価、来店人数等が記録された架空の売上データがあったとして、売上が多い日には何か傾向があるのだろうか？という設定です。

***

【環境】
Linux: debian10.3
python: 3.7.3
pandas: 1.0.3
statsmodels: 0.11.1
jupyter-lab: 2.1.0 

以下の様な、csvファイルがあったとして
 
Date,earnings,customer,earnings_customer,fortified_sweet,rum,brown_spirits,mojito_rebjito,cocktail,bar_food,cigar
2020-03-01,30000,5,6000,2,2,2,3,2,5,1

【1】モデルの適用とサマリーの表示(前回の続き)

```python:statsmodels

# 回帰モデルの呼び出し
model = sm.OLS(y, sm.add_constant(X))

# モデルの作成
results = model.fit()

#結果の詳細を表示
print(results.summary())


                            OLS Regression Results                            
==============================================================================
Dep. Variable:               earnings   R-squared:                       0.930
Model:                            OLS   Adj. R-squared:                  0.921
Method:                 Least Squares   F-statistic:                     100.8
Date:                Sat, 09 May 2020   Prob (F-statistic):           2.50e-28
Time:                        01:09:38   Log-Likelihood:                -618.49
No. Observations:                  61   AIC:                             1253.
Df Residuals:                      53   BIC:                             1270.
Df Model:                           7                                         
Covariance Type:            nonrobust                                         
===================================================================================
                      coef    std err          t      P>|t|      [0.025      0.975]
-----------------------------------------------------------------------------------
const            -435.1552   2434.515     -0.179      0.859   -5318.173    4447.863
customer         5103.4245    617.184      8.269      0.000    3865.511    6341.338
fortified_sweet   844.1247    543.874      1.552      0.127    -246.747    1934.997
rum              -389.6465    440.184     -0.885      0.380   -1272.545     493.252
brown_spirits    1267.2019    581.664      2.179      0.034     100.532    2433.872
cocktail        -1766.9369    568.908     -3.106      0.003   -2908.022    -625.852
bar_food           74.3759    514.091      0.145      0.886    -956.760    1105.512
cigar            4420.0626    599.323      7.375      0.000    3217.972    5622.153
==============================================================================
Omnibus:                       16.459   Durbin-Watson:                   1.864
Prob(Omnibus):                  0.000   Jarque-Bera (JB):               24.107
Skew:                           0.971   Prob(JB):                     5.83e-06
Kurtosis:                       5.390   Cond. No.                         37.4
==============================================================================

Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.

```

**サマリーの一部を見ると**

```python:statsmodels

#結果の詳細を表示
print(results.summary())

サマリーの一部

R-squared:                       0.930
Adj. R-squared:                  0.921
AIC:                             1253.

                      coef    std err          t      P>|t|      [0.025      0.975]
-----------------------------------------------------------------------------------

customer         5103.4245    617.184      8.269      0.000    3865.511    6341.338
fortified_sweet   844.1247    543.874      1.552      0.127    -246.747    1934.997
rum              -389.6465    440.184     -0.885      0.380   -1272.545     493.252
brown_spirits    1267.2019    581.664      2.179      0.034     100.532    2433.872
cocktail        -1766.9369    568.908     -3.106      0.003   -2908.022    -625.852
bar_food           74.3759    514.091      0.145      0.886    -956.760    1105.512
cigar            4420.0626    599.323      7.375      0.000    3217.972    5622.153

```

サマリーが表示されたら、まず見るところが、あるという。

「R-squared	」決定係数(1に近い程、精度が高い)
「Adj. R-squared」	自由度調整済み決定係数(説明変数が多い時の決定係数)
・このケースでは、説明変数が多いので、この値で判断しようと思います。

「AIC」	どの程度モデルの当てはまっているか？(小さい程、精度が高い。)
・数値が大きすぎる(精度が低い)様です

「coef」回帰係数(大きい程、全体に与える影響が大きい)
・これで見ると、「customer」や「cigar」が大きな影響を与える様です。

「>|t|」(小さい程(基準として、0.05未満)、変数の影響が偶然でない可能性が高い)
・これで見ると、「customer」や「cigar」に加えて、「cocktail」の値が小さいのは、偶然では無いという事の様です。

**ここまでのサマリーを見ると、説明変数が多い様です。**

<font color=blue>「customer」や「cigar」が売上に大きな影響を与えるという事がいえそうです。</font>

回帰係数の出力を見ると、ほぼ想定通りの結果といえると思います。

**「AIC」の値を見ると、説明変数が多く精度が低い様です。**
説明変数を減らし、再度、分析をやってみようと思います。

再分析の結果は、別の機会に更新しようと思います。

![customer_cigar.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/624077/e035eb34-1ece-cdfe-3a14-645ed21e09cc.jpeg)

グラフだけ先に投稿しておくと、凡例がありませんが、グラフを見ると、青っぽい線が「customer(ゲストの来店人数)」、赤っぽい線が「cigar(cigarの提供)」の動きです。

**以上、【初心者向け】回帰モデルの自前データで止まっている人向け(statsmodels(第2回目))でした。**