【Pythonデータサイエンス超入門2-1】回帰分析の基本【YouTube】
動画で学べるPythonによるデータサイエンスの基礎シリーズ、4本目です。Python/Pandas/Seabornの基本操作を覚えたら、いよいよ本格的なデータ分析の世界に踏み出しましょう。
その第一歩は「回帰分析」についての教材です。
動画
アジェンダ
時間 | 内容 |
---|---|
0:00 | イントロダクション |
4:33 | 回帰分析とは? |
14:22 | Pythonで回帰分析を行う準備 |
17:11 | ダミー変数の作成 |
19:30 | 回帰分析の実行 |
23:03 | 回帰分析の結果の解釈 |
30:27 | Formula APIによる回帰分析の実行 |
34:00 | 特徴量エンジニアリング |
41:38 | 未来予測 |
45:12 | グラフ作成による精度確認 |
52:26 | ラッソ回帰、リッジ回帰、Elastic Net |
1:05:45 | ロジスティック回帰 |
1:19:25 | ポアソン回帰 |
1:22:15 | クロージング |
シリーズ一覧
CSVのダウンロード
sales_sample.csv
sales_sample_pred.csv
user_sample.csv
user_sample_pred.csv
contract_sample.csv
ソースコード
線形回帰分析
CSV読み込み
1 |
df_sales = pd.read_csv("sales_sample.csv") |
ダミー変数の作成
1 |
df_sales["雨_ダミー"] = pd.get_dummies(df_sales["雨"]) |
Formula APIを使わない方法
1 2 3 4 5 6 |
X = df_sales[["気温","単価","雨_ダミー"]] #説明変数 y = df_sales["売上"] #目的変数 model = sm.OLS(y,sm.add_constant(X)) result = model.fit() result.summary() |
Formula APIを使う方法
1 2 3 4 5 |
model = smf.ols(data=df_sales, formula = "売上 ~ 気温 + 単価 + 雨_ダミー") result = model.fit() result.summary() |
Formula APIを使う方法(Ridge回帰、Lasso回帰、Elastic Net)
1 2 3 4 5 6 7 8 |
model = smf.ols(data=df_sales, formula = "売上 ~ 気温 + 単価 + 雨_ダミー") result = model.fit_regularized(L1_wt = 0.8,alpha=0.01) print(result.params) from sklearn.metrics import mean_squared_error np.sqrt(mean_squared_error(result.predict(),df_sales["売上"])) |
予測
1 2 |
df_sales_pred = pd.read_csv("sales_sample_pred.csv") result.predict() |
グラフの確認
1 2 3 4 5 6 7 8 9 10 11 12 13 |
sns.set(font="Hiragino Maru Gothic Pro",context="notebook") plt.figure(figsize=(10,8)) df_sales_sorted = df_sales.sort_values("気温") df_sales_sorted_0 = df_sales_sorted[df_sales_sorted["雨_ダミー"] == 0] df_sales_sorted_1 = df_sales_sorted[df_sales_sorted["雨_ダミー"] == 1] plt.plot(df_sales_sorted_0["気温"],df_sales_sorted_0["売上"],"o",color="b") plt.plot(df_sales_sorted_0["気温"],result.predict(df_sales_sorted_0[["気温","雨_ダミー"]]),"*-",color="b") plt.plot(df_sales_sorted_1["気温"],df_sales_sorted_1["売上"],"o",color="r") plt.plot(df_sales_sorted_1["気温"],result.predict(df_sales_sorted_1[["気温","雨_ダミー"]]),"*-",color="r") |
ロジスティック回帰分析
CSV読み込み
1 |
df_user = pd.read_csv("user_sample.csv") |
Formula APIを使わない方法
1 2 3 4 5 6 |
X = df_user[["性別","学生","滞在時間"]] y = df_user["登録"] model = sm.Logit(y,sm.add_constant(X)) result = model.fit() result.summary() |
Formula APIを使う方法
1 2 3 4 5 6 |
model = smf.glm(data=df_user, formula = "登録 ~ 学生 + 滞在時間 + 1" , family = sm.families.Binomial()) result = model.fit() result.summary() |
予測
1 2 |
df_user_pred = pd.read_csv("user_sample_pred.csv") result.predict(df_user_pred) |
ポアソン回帰分析
CSV読み込み
1 |
df_contract = pd.read_csv("contract_sample.csv") |
Formula APIを使わない方法
1 2 3 4 5 6 |
X = df_contract[["訪問回数","メール送信"]] y = df_contract["成約数"] model = sm.GLM(y, X, family=sm.families.Poisson()) results = model.fit() results.summary() |
Formula APIを使う方法
1 2 3 4 5 6 |
model = smf.glm(data=df_contract, formula = "成約数 ~ 訪問回数 + メール送信 + 1", family = sm.families.Poisson()) result = model.fit() result.summary() |
グラフの確認
1 2 3 4 5 6 7 8 9 10 11 12 13 |
sns.set(font="Hiragino Maru Gothic Pro",context="notebook") plt.figure(figsize=(10,8)) df_contract_sorted = df_contract.sort_values("訪問回数") df_contract_sorted_0 = df_contract_sorted[df_contract_sorted["メール送信"] == 0] df_contract_sorted_1 = df_contract_sorted[df_contract_sorted["メール送信"] == 1] plt.plot(df_contract_sorted_0["訪問回数"],df_contract_sorted_0["成約数"],"o",color="b") plt.plot(df_contract_sorted_0["訪問回数"],result.predict(df_contract_sorted_0),"*-",color="b") plt.plot(df_contract_sorted_1["訪問回数"],df_contract_sorted_1["成約数"],"o",color="r") plt.plot(df_contract_sorted_1["訪問回数"],result.predict(df_contract_sorted_1),"*-",color="r") |