【機械学習入門】線形回帰を使った売上予測の実装方法とR²スコアで精度を評価しよう!

※関数の書き方・実行結果に誤りがあるケースがあります。随時修正中です。また誤りに気づかれた方はこちらからご連絡頂きますとめちゃ嬉しいです。

目次

機械学習入門へようこそ!

みなさん、こんにちは!今日は「機械学習」っていうちょっと難しそうなテーマに挑戦してみるで!でも、心配せんでええよ。今日は特に「線形回帰」という手法を学ぶから、これを使ったらデータから予測ができるようになるんや。

メリット

  • 予測ができる: 線形回帰を使うことで、未来の出来事を予測したり、データの関係性を理解したりできるで。
  • シンプルやけどパワフル: 初心者でも分かりやすい手法やけど、実際のビジネスや研究でもよう使われてるんや。

例え話

例えば、フルーツ屋さんがあるとするやろ?そのお店が毎日どれだけのリンゴが売れるかを知りたいとする。過去のデータを使って、気温や曜日、特別なイベントがあった日などをもとに「今日は何個売れるやろか?」って予測できるんや。これが線形回帰の使い方の一例やで!

さあ、みんなも一緒に線形回帰の世界を探求していこう!

線形回帰の基本概念と用途

さて、最初に線形回帰の基本的な考え方についてお話しするで!線形回帰は、データの関係を直線で表現する方法や。これを使うことで、ある変数が別の変数にどんだけ影響を与えてるかを見れるようになるんや。

線形回帰の構造

線形回帰は、以下のような式で表されることが多いで。

$$ y = ax + b $$

  • y: 予測したい値(目的変数)
  • x: 入力する値(説明変数)
  • a: 傾き(回帰係数)
  • b: 切片(y軸との交点)

この式を使って、例えば「気温が上がったらリンゴの売上がどれくらい変わるか」を見積もることができるんや。

用途

線形回帰はさまざまな分野で利用されとるで。具体的には:

  • ビジネス: 売上予測、マーケティングの効果測定
  • 医療: 患者のデータから病気のリスクを予測
  • スポーツ: 選手のパフォーマンスを分析して、勝率を予測

このように、線形回帰はデータを使った予測や分析に大変役立つ手法なんやで!次は、実際に単回帰分析を実装してみよう!

単回帰分析の実装

さて、次は「単回帰分析」の実装について見ていくで!単回帰分析は、ひとつの説明変数(x)を使って目的変数(y)を予測する方法や。まずは、必要なライブラリをインストールしてデータを準備してみよう!

必要なライブラリのインポート

Pythonでは、データ処理や可視化のためにいくつかのライブラリを使うで。まずはそれをインポートするところから始めよう。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

データの準備

ここでは、簡単なデータセットを使ってみるで。例えば、気温とリンゴの売上データを作成してみる。

# データの生成
data = {
    'Temperature': [30, 32, 34, 36, 38, 40, 42, 44, 46, 48],
    'Sales': [200, 220, 240, 260, 280, 300, 320, 340, 360, 380]
}

# DataFrameに変換
df = pd.DataFrame(data)

# データの表示
print(df)

モデルの作成

次に、データをトレーニングセットとテストセットに分けて、線形回帰モデルを作成するで。

# 特徴量と目的変数の分割
X = df[['Temperature']]  # 説明変数
y = df['Sales']          # 目的変数

# データをトレーニングセットとテストセットに分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 線形回帰モデルの作成
model = LinearRegression()
model.fit(X_train, y_train)

予測の実施

トレーニングが完了したら、テストデータを使って予測を行うで。

# テストデータを使って予測
y_pred = model.predict(X_test)

# 結果の表示
print("予測値:", y_pred)

結果の可視化

最後に、実際のデータと予測結果をグラフで視覚化してみるで。

# グラフの描画
plt.scatter(X, y, color='blue', label='実データ')
plt.scatter(X_test, y_pred, color='red', label='予測値')
plt.plot(X, model.predict(X), color='green', label='回帰直線')
plt.xlabel('温度 (°C)')
plt.ylabel('リンゴの売上')
plt.title('単回帰分析')
plt.legend()
plt.show()

これで、単回帰分析の実装が完了や!実データと予測結果を見比べて、モデルの精度を感じてみてな次は、重回帰分析への拡張について学んでいこう!

重回帰分析への拡張

さて、次は「重回帰分析」について学んでいくで!重回帰分析は、複数の説明変数を使って目的変数を予測する方法や。これを使うことで、より複雑なデータの関係をモデル化できるんや。

重回帰分析の基本

重回帰分析は以下のような式で表されるで。

$$ y = a_1x_1 + a_2x_2 + … + a_nx_n + b $$

  • y: 予測したい値(目的変数)
  • x_1, x_2, …, x_n: 入力する値(説明変数)
  • a_1, a_2, …, a_n: 各説明変数の係数
  • b: 切片

データの準備

今回は、気温だけでなく、湿度や曜日といった他の要因も考慮して予測してみるで。データを少し拡張してみよう。

# 拡張データの生成
data = {
    'Temperature': [30, 32, 34, 36, 38, 40, 42, 44, 46, 48],
    'Humidity': [40, 42, 43, 45, 50, 55, 60, 65, 70, 75],
    'DayOfWeek': [1, 2, 1, 2, 1, 2, 1, 2, 1, 2],  # 1: 月曜日, 2: 火曜日
    'Sales': [200, 220, 240, 260, 280, 300, 320, 340, 360, 380]
}

# DataFrameに変換
df = pd.DataFrame(data)

# データの表示
print(df)

モデルの作成

次に、説明変数を複数指定して、重回帰モデルを作成してみるで。

# 特徴量と目的変数の分割
X = df[['Temperature', 'Humidity', 'DayOfWeek']]  # 複数の説明変数
y = df['Sales']                                   # 目的変数

# データをトレーニングセットとテストセットに分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 重回帰モデルの作成
model = LinearRegression()
model.fit(X_train, y_train)

予測の実施

トレーニングが終わったら、テストデータで予測を行うで。

# テストデータを使って予測
y_pred = model.predict(X_test)

# 結果の表示
print("予測値:", y_pred)

モデルの係数と切片の解釈

重回帰分析の特徴は、各説明変数の係数を解釈できるところや。モデルの係数を確認してみよう。

# モデルの係数と切片の表示
print("係数:", model.coef_)
print("切片:", model.intercept_)

この出力を見て、例えば「気温が1度上がると、売上がどれくらい増えるか?」といった具体的な影響を理解することができるんや。

これで、重回帰分析の実装が完了や!複数の変数を考慮することで、より正確な予測ができるようになるで。次は、モデルの予測精度を評価する方法について見ていこう!

モデルの係数と切片の解釈

さて、重回帰分析を実装した後は、モデルの係数と切片について詳しく解説していくで!これを理解することで、どの変数が目的変数にどれだけ影響を与えているのかを把握できるんや。

係数の解釈

重回帰分析の係数は、各説明変数が目的変数に与える影響を示すもんや。具体的には、ある説明変数が1単位増加するごとに目的変数がどれだけ増加するかを示しているで。

例えば、次のような出力があったとするで。

係数: [5.0, 2.0, 10.0]
切片: 50.0

この場合の解釈は以下の通りや。

  • Temperatureの係数 (5.0): 気温が1度上がると、リンゴの売上が5個増える。
  • Humidityの係数 (2.0): 湿度が1%上がると、リンゴの売上が2個増える。
  • DayOfWeekの係数 (10.0): 月曜日から火曜日に変わると、リンゴの売上が10個増える。

切片の解釈

切片は、全ての説明変数が0のときの目的変数の値を示すで。上の例で言うと、切片が50の場合、全ての説明変数(気温、湿度、曜日)が0のとき、リンゴの売上は50個になるってことや。

ただ、実際には説明変数が0になることは少ないから、切片の解釈には注意が必要や。あくまでモデルの一部として捉えたほうがええで。

係数の重要性

この係数の大小によって、どの変数が重要かもわかるんや。例えば、Temperatureの係数が一番大きい場合、売上に対する影響が一番大きいのは気温やってことや。

これを踏まえて、ビジネス戦略を考えるときには、どの要因を重視するかを決めるのに役立つで。

これで、モデルの係数と切片についての解説は終了や!次は、予測精度の評価方法、特にR²スコアについて見ていこう!

予測精度の評価:R²スコア

さて、最後はモデルの予測精度を評価する方法について学んでいくで!予測精度を測る指標はいくつかあるけど、ここでは「R²スコア」(決定係数)について詳しく見ていくで。

R²スコアとは?

R²スコアは、モデルがどれだけデータの分散を説明できているかを示す指標や。値は0から1の範囲にあり、1に近いほどモデルの精度が高いことを意味するで。

  • R² = 1: 完璧なモデル。全てのデータポイントが回帰直線上に位置する。
  • R² = 0: モデルは何の情報も与えていない。単純に平均値で予測したのと同じ。

R²スコアの計算

R²スコアは、以下の式で計算されるで。

$$ R² = 1 – \frac{SS_{res}}{SS_{tot}} $$

  • SS_res: 残差平方和(実際の値と予測値の差の二乗和)
  • SS_tot: 全体平方和(実際の値と平均値の差の二乗和)

実装してみよう

それでは、実際にR²スコアを計算してみるで!先ほどのモデルを使って、テストデータを基にR²スコアを求めてみよう。

from sklearn.metrics import r2_score

# R²スコアの計算
r2 = r2_score(y_test, y_pred)

# R²スコアの表示
print("R²スコア:", r2)

このコードを実行することで、モデルの予測精度がわかるで。値が高ければ高いほど、モデルがデータの傾向をよく捉えているということや。

結果の解釈

例えば、R²スコアが0.85やったとしたら、モデルはデータの85%の変動を説明しているってことや。逆に0.2やったら、モデルの精度は低いということになる。

これをもとに、モデルの改善や新しい説明変数の追加を検討することができるで。R²スコアを使って、より良いモデルを目指していこう!

以上で、予測精度の評価方法についての解説は終了や!機械学習の基本的な流れを理解できたかな?次は、さらに深い技術や実践的な応用について学んでいくことができるで!

【機械学習入門】線形回帰を使った売上予測の実装方法とR²スコアで精度を評価しよう!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次