なぜ今「回帰分析 × ChatGPT」なの?
「回帰分析」は、数値を“予測”するための基本手法です。売上、アクセス数、広告効果、滞在時間、客単価など、ビジネスで使える場面はとても多いです。近年は**AI(Artificial Intelligence/人工知能)**の進化により、ChatGPTが分析ワークの“案内役・自動化パートナー”として使われるようになりました。

数字もコードも苦手…。回帰分析って本当に自分でできる?

ChatGPTを活用にすれば、手順の確認・コード生成・結果の説明まで一気に時短できます。この記事の通りに進めればOK!
回帰分析とは?AIとの関係
回帰分析は「入力(説明変数)から数値を予測」する手法です。売上・需要・滞在時間・LTV など連続値に使います。
-
単回帰:説明変数が1つ(例:広告費→売上)
-
重回帰:説明変数が複数(例:TV/ラジオ/WEB広告→売上)
-
AI(機械学習)では、線形回帰、Ridge/Lasso、ランダムフォレスト、XGBoostが定番。まずは線形回帰で関係性の向き・強さを掴むのが王道。
用語(最初だけ英語併記)
-
R²(決定係数:Coefficient of Determination)
-
RMSE(二乗平均平方根誤差:Root Mean Squared Error)
-
MAE(平均絶対誤差:Mean Absolute Error)
-
VIF(分散拡大係数:Variance Inflation Factor)
回帰分析の詳細は下記の記事を参照願いします。
関連記事:誰でもわかる!回帰分析の基礎と実践法

成功する回帰分析の基本フロー
-
目的定義:何を予測?(例:翌月売上)評価指標は?
-
特徴量候補の洗い出し:広告費、価格、在庫、季節、競合指標、トレンドなど
-
データ前処理:欠損/外れ値/型/スケーリング/カテゴリのダミー化
-
学習(エクセル or Python)
-
解釈→施策:係数の符号と大きさから改善案へ
-
運用:定期更新、自動化、ダッシュボード化
手順(全体像)
- 目的の明確化:何を、どれだけ、いつ予測する?
- データ確認:欠損・外れ値・単位・期間の整合。
- 可視化:散布図・相関(皮相関)で当たりを付ける。
- モデル選択:単回帰 → 重回帰 → 正則化の順で段階的に。
- 学習・評価:学習データ/検証データの分割、R²やRMSEを見る。
- 解釈・改善:重要変数、係数の符号、残差のパターン、共線性。
- 共有:結論→根拠→次アクションの順でスライド化。
具体的なChatGPTへのプロンプト文 作成手順
-
目的を決める(何を予測・改善したい?)
-
データを用意(コピペできる表 or CSV)
-
分析の指示(回帰/グラフ/精度確認)
-
結果の解釈(R²・P値・回帰式の意味)
- 改善アクションを聞く
目的定義を手伝ってもらう
Excelの手順を作ってもらうプロンプト文 事例
Pythonコードを生成してもらうプロンプト文 事例
事例で学ぶ ChatGPT×Excelでの単回帰分析
ChatGPTにデーターを入力し、エクセルでの単回帰分析の手順及び評価を指示するプロンプト文を入力すれば簡単に単回帰分析が作成できる!!
単回帰分析ってなに?
1つの 説明変数(原因) から
1つの 目的変数(結果) を 数式で予測 する方法です。
例)
| 目的 | 使う変数 |
|---|---|
| 売上を予測したい | 広告費 |
| 不良率を予測したい | 設備稼働率 |
| アイス重量のばらつきを予測したい | 充填温度 |
→ 「温度を上げると、アイス重量はどう変わる?」みたいな相関を見ます。
使うサンプルデータ
例えば「充填温度(℃)」と「アイスの重量(g)」の関係
| A(温度) | B(重量) |
|---|---|
| 2 | 95 |
| 3 | 96 |
| 4 | 97 |
| 5 | 98 |
| 6 | 100 |
| 7 | 101 |
| 8 | 103 |
| 9 | 104 |
| 10 | 105 |
| 11 | 107 |
① Excelで分析ツールをONにする(最初だけ)
-
ファイル→オプション -
アドイン -
下の管理 →
Excelアドイン→分析ツールにチェック → OK
*「データ」タブの右端に「データ分析」ボタンが追加されていれば、完了!
② 単回帰分析を実行
-
上メニューの
データ→データ分析をクリック -
回帰分析を選択 → OK -
入力値をセット
| 設定項目 | 入れるもの |
|---|---|
| Y(目的変数) | 重量データ(B2:B11) |
| X(説明変数) | 温度データ(A2:A11) |
| ラベル | ✔(1行目を選んだら) |
| 出力先 | 新規シート推奨 |
「OK」を押すと、以下のように回帰分析の結果が出力されて完了!
③ 出てきた結果の読み方
上記画像の4行目に記載されている「重決定 R2」は一般に「決定係数」といい、分析結果の当てはまりの良さを判断する指標のひとつです。0~1の範囲の値をとり、基本的に決定係数が1に近いほど当てはまりがよく、0に近いほど当てはまりが悪いとされています。
| 項目 | 意味 |
|---|---|
| R²(決定係数) | 1に近いほど「温度で重量を説明できてる」 |
| 重回帰の R | 相関の強さ(±1に近いほど強い) |
| P値 | 0.05より小さければ「関係あり!」と判断 |
| 係数(切片・温度) | 予測式を作るパーツ |
④ 予測の数式を作る(これが結論)
出力の例としてこう出たとします↓
| 係数 |
|---|
| 切片(Intercept) |
| 温度 |
この場合の回帰式:
つまり…
✅ 温度が1℃上がると、重量は約1.3455g増える傾向
⑤ 散布図+回帰直線グラフも作る(視覚で納得)
-
AとB列のデータ範囲を選択
-
挿入→散布図 -
グラフ上で点を右クリック →
近似曲線の追加 -
「線形」を選択
-
「グラフに数式を表示」と「グラフにR-2乗値を表示する」を✅
→ さっきの式が表示されます✨
⑥ どう改善アクションにつなげるか
| 分析結果 | 現場のアクション |
|---|---|
| R²が高い | 温度管理を強化すれば重量バラつきを減らせる |
| 係数が大きい | 温度の微調整で製品が変動しやすい→管理幅を狭くする |
| R²が低い | 温度以外の原因(原料粘度、ポンプ圧力など)も調査 |
⑦ よくあるNGと回避
| NG | 理由 | 対策 |
|---|---|---|
| 相関=因果と思い込む | たまたま関係してるだけかも | 現場検証で裏取り |
| 外れ値放置 | 結果が歪む | 異常データは原因判定する |
| データ数が少なすぎ | 信頼できない | 最低10〜30点は欲しい |
Excelでの単回帰分析 まとめ
-
回帰分析は 原因→結果の影響の大きさを数式化できる
-
Excelだけで 予測・可視化・分析・改善までできる
-
大事なのは P値・R²・回帰式の3つ
-
分析のゴールは「改善アクション」まで結びつけること
事例で学ぶPythonで重回帰分析を行う手順
Python(scikit-learn)を使って重回帰分析を実行する方法を、実務で分かりやすい事例とともに解説します。コードテンプレート、ChatGPTへ投げるプロンプト、得られた結果の読み方、そして改善・対策案まで網羅しています。
Pythonライブラリの活用
Pythonで重回帰分析を行う際には、主にscikit-learnとstatsmodelsという2つのライブラリがあります。scikit-learnは、機械学習の重回帰分析を含むアルゴリズムが豊富に実装されており、scikit-learnのLinearRegressionクラスを使うことで、簡単に重回帰モデルを構築し、学習させることができます。
一方、statsmodelsは、統計モデルの分析に特化したライブラリであり、より詳細な統計的分析を行うことが可能です。例えば、回帰係数の有意性検定や、モデルの適合度を評価するための指標などを算出することができます。
scikit-learnは、機械学習の初心者や、迅速にモデルを構築したい場合に適しています。一方、statsmodelsは、統計的な解釈を重視する場合や、より詳細な分析を行いたい場合に適しています。
*下記の記事にGoogle Colab を使って、Pythonを実行する方法を、初心者向けにわかりやすく解説します。
関連記事:AI chatGPTによるグラフ作成 Google Colabとの連携
事例で学ぶ 重回帰分析 事例:アイス販売の売上予測
下記のデーターを基にPythonでの重回帰分析の進め方の手順を解説します。
目的はアイス販売の売上予測 sales(売上) を ad_cost(広告費)、temp(気温)、visits(来店客数) で予測します。
サンプルデーター(試料数:300件)⇒エクセルファイル ダウンロード
売上は「広告費」「気温」「来客数」の影響を受けると仮定する
| 日付 | ad_cost(広告費) | temp(気温) | visits(来店客数) | sales(売上) |
|---|---|---|---|---|
| 1日目 | 18,302 | 27 | 137 | 36,528 |
| 2日目 | 7654 | 19.6 | 134 | 32,107 |
| 3日目 | 9619 | 21.2 | 146 | 38,406 |
| … | … | … | … | … |
Pythonコード(テンプレート)
# --- ライブラリ ---
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score, mean_absolute_error, mean_squared_error
import seaborn as sns
import matplotlib.pyplot as plt
from google.colab import files
# グラフ表示をきれいに
plt.rcParams['figure.figsize'] = (6, 4)
# --- ColabにExcelファイルをアップロード ---
# 実行すると「ファイルを選択」が出るので .xlsx を選ぶ
uploaded = files.upload()
file_name = list(uploaded.keys())[0] # 例: "sample_month_300.xlsx"
# --- データ読み込み(Excelファイル)---
# シート名を指定したい場合は sheet_name="Sheet1" などを追加
df = pd.read_excel(file_name)
print("データ読み込み完了:", df.shape)
print(df.head())
# --- 必要列チェック ---
required_cols = ['ad_cost', 'temp', 'visits', 'sales']
missing = [c for c in required_cols if c not in df.columns]
if missing:
raise ValueError(f"必要列が見つかりません: {missing}")
# --- データの行順を固定(任意:再現性を高めたい場合)---
df = df.sort_values(by=['ad_cost', 'temp', 'visits']).reset_index(drop=True)
# --- 説明変数(X)と目的変数(y)---
X = df[['ad_cost', 'temp', 'visits']]
y = df['sales']
# --- 学習データとテストデータに分割(テスト20%)---
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, shuffle=True
)
# --- 学習(モデル作成) ---
model = LinearRegression()
model.fit(X_train, y_train)
# --- 予測 ---
pred = model.predict(X_test)
# --- モデル評価(MSE→RMSEへ変換)---
r2 = r2_score(y_test, pred)
mae = mean_absolute_error(y_test, pred)
mse = mean_squared_error(y_test, pred) # squared=False は使わない
rmse = mse ** 0.5 # RMSE に変換
print("=== 評価指標 ===")
print(f'R2 : {r2:.3f}')
print(f'MAE : {mae:.2f}')
print(f'RMSE : {rmse:.2f}')
# --- 回帰係数を確認 ---
coef = pd.DataFrame({
'feature': X.columns,
'coefficient': model.coef_
})
print("\n=== 回帰係数 ===")
print(coef)
print(f"\n切片 (intercept): {model.intercept_:.3f}")
# --- 実測と予測の散布図(画像保存)---
plt.figure()
sns.scatterplot(x=y_test, y=pred)
plt.xlabel('Actual Sales')
plt.ylabel('Predicted Sales')
# y=x の基準線
minv = min(y_test.min(), pred.min())
maxv = max(y_test.max(), pred.max())
plt.plot([minv, maxv], [minv, maxv], linestyle='--', color='red')
plt.tight_layout()
plt.savefig('actual_vs_pred.png')
plt.show()
# --- 残差を確認(画像保存)---
residuals = y_test - pred
plt.figure()
sns.histplot(residuals, kde=True)
plt.title('Residuals Distribution')
plt.xlabel('Residual (Actual - Predicted)')
plt.tight_layout()
plt.savefig('residuals.png')
plt.show()
print("\n実測 vs 予測の散布図: actual_vs_pred.png")
print("残差分布の図 : residuals.png")
Google ColabのPytyon実行結果
実測 vs 予測 の散布図
残差分析
残差(Residual)とは?
残差とは、
実際の値(観測値) − モデルの予測値
で表される「誤差」のことです。
つまり、モデルがどれだけ当たっているか・外しているかを1件ごとに表したもの。
残差の理想的な性質(良いモデルの条件)
重回帰分析では、残差が次のような性質を持つと「モデルが健全」と判断されます。
今回の「Residuals Distribution」画像の見方
Colabで出力されたヒストグラムは、残差の分布を表しています。
解釈ポイント:
-
中心が0付近で山型
→ モデルの誤差が平均的にゼロで、過剰にも過小にも偏っていない。
→ ✅「バイアスのない良い予測」と言える。 -
左右がほぼ対称・滑らかな曲線(kde=Trueで青線)
→ 残差がほぼ正規分布 → ✅ 回帰モデルの前提が成立している。 -
もし一方に偏っていたら
→ 予測が一方向にずれている(例:常に過大評価 or 過小評価)。 -
裾が長い(外れ値)
→ 一部のデータが大きく外れている → ⚠ 外れ値や異常値を疑う。
解釈ポイント
-
R² = 0.89 → 売上(sales)の約89%を説明変数(広告費・気温・来訪者数)で説明できています。精度は高い水準。
-
MAE = 約1523, RMSE = 約2148 → 平均的に実測値との誤差が1500~2000程度あることを意味します。
-
係数の意味:
-
ad_cost(広告費)が1単位上がると、売上は平均 +0.46 増加 -
temp(気温)が1°C上がると、売上は平均 +181.75 増加 -
visits(来訪者数)が1人増えると、売上は平均 +162.59 増加
-
事例で学ぶ 超簡単! ChatGPTだけで重回帰分析をする
有料ChatGPT(Plus版)ならデーターを渡して下記のプロンプト文のように「重回帰分析して」とプロンプト文を宣言すればあっという間に分析結果が表示され、グラフの分析の解釈も教えてくれます。
添付データーの重回帰分析を行ってください。
分析後、以下を出力してください。
1. 回帰式(係数と切片)
2. R2、MAE、RMSE の評価指標
3. 実測 vs 予測 の散布図(PNG)
4. 残差分析(残差の分布図と問題点)
データ列:ad_cost, temp, visits, sales
ChatGPTの有料プランであるChatGPT Plusは、無料版の基本機能に加え、より高度なグラフ作成機能であるAdvanced Data Anataysisという機能が搭載されています。
Advanced Data Anataysisとは?
Advanced Data Analysis(旧称Code Interpreter)はChatGPT-4に統合された機能です。
これを使うことで、プログラミング知識がなくても、日本語の指示だけでデータの読み込みから分析、グラフの作成や複雑な計算といったデータ関連の多岐にわたる作業を行うことが可能になります。
ChatGPTの実行結果
1. 回帰式(係数と切片)
説明変数:ad_cost, temp, visits
目的変数:sales
推定された回帰式は:
(小数第3位以降は四捨五入)
-
ad_cost:広告費が1単位増えると、他が同じなら sales は平均 +0.523 増加
-
temp:気温が1°C上がると、sales は平均 +345.63 増加
-
visits:来訪者数が1人増えると、sales は平均 +151.80 増加
2. 評価指標(テストデータ:全体の20%)
-
R²(決定係数): 0.9164
-
MAE(平均絶対誤差): 1363.93
-
RMSE(2乗平均平方根誤差): 2016.02
ざっくり評価
-
R²=0.92 近く → sales の変動の約 92% を 3つの説明変数で説明できている → かなり当てはまり良好。
-
MAE ≒ 1364, RMSE ≒ 2016 → 1件あたりの誤差は「おおよそ ±1,500〜2,000」くらいのスケール感。
3. 実測 vs 予測 の散布図(PNG)
テストデータの 実測値 vs 予測値 の散布図を出力しました。
図の読み方:
-
斜めの点線(y=x)に点が近いほど「予測が実測に近い」
-
今回は多くの点が線の近くに集まっていて、外れた点は一部だけ → 予測精度は良好と評価できます。
4. 残差分析(残差の分布図と問題点)
4-1. 残差の分布図
残差 = 実測値 − 予測値 のヒストグラム+正規分布フィットを描きました。
残差の基本統計量:
-
平均: -97.60(ほぼ0に近い、小さな負バイアス)
-
標準偏差: 2013.66
-
最小値: -3993.76
-
最大値: 4344.88
評価・解釈
-
平均 ≈ 0(-97程度)
→ 予測が体系的に大きくズレているわけではなく、過大・過小のバランスはおおむね良好。 -
分布は大まかに左右対称の山型で、中央付近にピーク → 誤差は概ね正規分布っぽいふるまい。
-
ただし、±4000 近くの残差もあり、やや大きめの外れ値も存在している(ごく一部)。
参考:何故、重回帰分析ではデータを次の2つに分ける?
もし、全データを丸ごと学習に使ってしまうと、
モデルは訓練データを丸暗記してしまい
「本番環境でどれくらい予測できるか」がわからない
という問題が起きます。
だから、
-
80% → 学習用
-
20% → 精度チェック用
みたいに分けて、
「このモデルは新しいデータに対してどれくらい当てられるのか?」
を厳密に評価するわけです。
「学習データ80% vs テストデータ20%」の分布比較可視化の図は下記です。
重回帰分析でデータをTrain/Test用に 分割するのはモデルの妥当性を確認するために必要。
ただし、分割の仕方で精度が大きく変わるため慎重に扱う必要がある。
まとめ:小さく始めて、早く学ぶ
Python と scikit-learn を使えば、売上に寄与する要因を数値で把握できます。重要なのは「モデル結果を現場施策に落とし込むこと」。まずはデータを増やしてモデルの信頼性を高め、施策→評価→改善のサイクルを回しましょう。
- まずは単回帰で当たりを付ける
- 重回帰→正則化で精度と安定性を高める
- R²/MAE/RMSEの複数指標で評価
- ChatGPTは“実行役”ではなく参謀役。プロンプトで明確に指示











コメント