スキルUP!データ分析実践

データ分析実践:PythonとScikit-learnで始める予測モデル入門

Tags: データ分析, 予測分析, 機械学習, Python, Scikit-learn

はじめに:データ分析における「予測」の魅力

データ分析を進める上で、過去や現在のデータを理解するだけでなく、将来の出来事や未知の値を予測することに興味を持つ方も多いのではないでしょうか。例えば、商品の需要予測、株価の変動予測、顧客の行動予測など、予測はビジネスや研究において非常に価値のある分析手法です。

予測モデルの構築と聞くと難しく感じるかもしれませんが、基本的な考え方とツールを理解すれば、初心者の方でも実践的に取り組むことができます。この記事では、データ分析で広く使われているプログラミング言語Pythonと、機械学習ライブラリの代表格であるScikit-learn(サイキット・ラーン)を使用して、簡単な予測モデルを作成する最初の一歩を踏み出します。

予測モデルとは何か

予測モデルとは、過去に収集したデータから、将来や未知のデータの値を推測するための数学的なモデルです。データの「パターン」や「関係性」を学習し、それに基づいて予測を行います。

予測には大きく分けて二つの種類があります。

今回は、より直感的に理解しやすい回帰、その中でも最も基本的なモデルである線形回帰を例に、予測モデルの構築を実践します。

予測モデル構築の基本的なステップ

予測モデルを作成するプロセスは、一般的に以下のステップで進められます。

  1. データの準備: 分析に必要なデータを収集し、整理します。欠損値の処理や外れ値の特定など、データの「掃除」(前処理)が重要です。
  2. モデルの選択: どのような予測を行いたいかに応じて、適切なモデル(線形回帰、決定木、ニューラルネットワークなど)を選びます。
  3. モデルの学習: 準備したデータの一部(これを「訓練データ」と呼びます)を使って、モデルにデータのパターンや関係性を学習させます。
  4. 予測: 学習済みのモデルを使って、まだ結果が分かっていない新しいデータに対して予測を行います。
  5. 評価: 予測の精度がどの程度かを評価します。このとき、学習に使わなかった別のデータ(これを「テストデータ」と呼びます)を使って評価することで、未知のデータに対するモデルの性能を測ることができます。

これらのステップを順に進めることで、精度の高い予測モデルを構築することを目指します。

PythonとScikit-learnを使った簡単な予測モデルの実践

それでは、PythonとScikit-learnを使って、簡単な線形回帰モデルを構築してみましょう。ここでは、「勉強時間」から「試験の点数」を予測するという、非常にシンプルな例を考えます。

まずは、必要なライブラリをインポートします。まだインストールしていない場合は、pip install numpy scikit-learn matplotlib コマンドでインストールしてください。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

それぞれのライブラリの役割は以下の通りです。

次に、予測に使用するサンプルデータを生成します。今回は、現実のデータではなく、線形的な関係に少しノイズを加えた模擬データを作成します。

# サンプルデータの生成
# 例: 勉強時間と試験の点数の関係を模擬
np.random.seed(0) # 乱数のシードを設定し、毎回同じデータが生成されるようにします
X = 2 * np.random.rand(100, 1) # 特徴量 (勉強時間): 0から2時間のランダム値 100個
y = 4 + 3 * X + np.random.randn(100, 1) # 目的変数 (点数): 4 + 3 * X + ノイズ

ここで生成した X が予測に使う「勉強時間」(特徴量)、y が予測したい「試験の点数」(目的変数)です。データは100個あります。

次に、モデルの汎化性能(未知のデータに対する予測精度)を正しく評価するために、データを「訓練データ」と「テストデータ」に分割します。

# データを訓練用とテスト用に分割します
# test_size=0.2 は全体の20%をテストデータにするという意味です
# random_stateは分割方法を固定するためのシードです
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

これで、X_train, y_train がモデルの学習に使うデータ、X_test, y_test が学習後のモデルの評価に使うデータとなりました。

いよいよモデルの構築と学習です。Scikit-learnを使って線形回帰モデルを簡単に定義し、訓練データで学習させます。

# 線形回帰モデルのインスタンス(実体)を作成します
model = LinearRegression()

# 訓練データ (X_train, y_train) を使ってモデルを学習させます
# fit() メソッドを実行することで、モデルがデータからパターンを学びます
model.fit(X_train, y_train)

model.fit() を実行すると、モデルは X_trainy_train の関係性(今回の場合は最適な直線)を学習します。学習が完了したモデルは、これで予測を行う準備ができました。

学習済みモデルを使って、テストデータに対する予測を行ってみましょう。

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

# 例えば、新しい勉強時間に対する予測点数を知りたい場合
# predict() には特徴量を入れる必要があります。ここでは1.5時間の場合を想定します。
new_study_time = np.array([[1.5]]) # 特徴量は二次元配列として渡す必要があります
predicted_score = model.predict(new_study_time)
print(f"勉強時間 1.5時間の場合の予測点数: {predicted_score[0][0]:.2f}点")

これで、モデルが予測した値 y_pred が得られました。また、実際に未知の入力データ new_study_time に対する予測も行うことができます。

最後に、モデルの予測性能を評価します。テストデータの実際の値 (y_test) と、モデルが予測した値 (y_pred) を比較して、どの程度予測が正確だったかを測ります。評価指標として、今回は平均二乗誤差(Mean Squared Error; MSE)を使います。MSEは、予測値と実際の値の差の二乗の平均であり、値が小さいほど予測精度が高いことを示します。

# テストデータにおける予測性能を評価します
# 平均二乗誤差 (MSE) を計算します
mse = mean_squared_error(y_test, y_pred)
print(f"テストデータにおける平均二乗誤差 (MSE): {mse:.2f}")

MSEの値を確認することで、モデルがおおよそどの程度の誤差で予測を行っているかを把握できます。

最後に、モデルが学習した直線と実際のデータの分布をグラフで確認してみましょう。

# 学習データとテストデータを散布図で表示
plt.scatter(X_train, y_train, color='blue', label='Training data')
plt.scatter(X_test, y_test, color='green', label='Test data')

# モデルが学習した回帰直線を描画
# 全てのXデータ範囲で直線を引くためにX_trainとX_testを結合しソートします
X_combined = np.vstack((X_train, X_test))
X_plot = np.linspace(X_combined.min(), X_combined.max(), 100).reshape(-1, 1)
y_plot = model.predict(X_plot)
plt.plot(X_plot, y_plot, color='red', linewidth=2, label='Regression Line')

plt.xlabel("勉強時間 (時間)")
plt.ylabel("試験の点数")
plt.title("勉強時間と試験の点数の関係と線形回帰モデル")
plt.legend()
plt.grid(True)
#plt.show() # ウェブ記事では通常グラフ画像として表示するため、この行は実行しません

このグラフから、モデルがデータの特徴を捉え、概ね線形的な関係を学習できていることが視覚的に確認できます。

次のステップへ

この記事では、データ分析における予測の基本的な考え方と、PythonおよびScikit-learnを使った最も簡単な線形回帰モデルの構築方法をご紹介しました。

ここからさらに予測分析のスキルを高めるためには、以下のステップに進むことが考えられます。

これらのステップは、いずれも実践を通して身についていくものです。まずは、今回扱った線形回帰モデルを他の簡単なデータセットで試してみたり、Scikit-learnの公式ドキュメントや他の学習リソースで様々なモデルの例に触れてみたりすることから始めてみましょう。

まとめ

予測分析はデータ分析の強力な応用分野であり、適切に活用することでデータから未来の洞察を得ることが可能になります。PythonとScikit-learnは、予測モデルを構築するための非常に強力で使いやすいツールを提供しています。

この記事でご紹介した線形回帰モデルはあくまで入門ですが、ここから様々なデータとモデルに触れることで、予測分析のスキルを着実に向上させることができます。ぜひ、実際にコードを動かしながら、予測モデル構築の世界を探求してみてください。