17.Pythonでデータ分析を始めよう!初心者向けガイド-データ分割入門編-

PR表記

※アフィリエイト広告を利用しています

どうもニコイチです。前回はモデル作成の概要をお伝えしました。今回から実際にモデル作成に写っていきます。まずは、データを分割していきます。

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
import seaborn as sns

# データ読み込み
df = pd.read_csv('bank_data.csv')

# 特徴量の準備(数値型のみを使用)
X = df[['age', 'balance', 'duration']]
y = df['y']

# データ分割
X_train, X_test, y_train, y_test = train_test_split(
    X, y, 
    test_size=0.25,    # テストデータの比率
    random_state=42,   # 再現性のための固定値
    stratify=y        # 目的変数の比率を維持
)

# モデル学習
model = LogisticRegression()
model.fit(X_train, y_train)

# 予測
train_pred = model.predict(X_train)
test_pred = model.predict(X_test)

# 結果の可視化
plt.figure(figsize=(12, 4))

# 学習データとテストデータのサイズ比較
plt.subplot(1, 2, 1)
sizes = [len(X_train), len(X_test)]
labels = ['学習データ\n({:,}件)'.format(len(X_train)), 
          'テストデータ\n({:,}件)'.format(len(X_test))]
plt.pie(sizes, labels=labels, autopct='%1.1f%%')
plt.title('データ分割の比率')

# 精度比較
plt.subplot(1, 2, 2)
accuracies = [
    accuracy_score(y_train, train_pred) * 100,
    accuracy_score(y_test, test_pred) * 100
]
plt.bar(['学習データ', 'テストデータ'], accuracies)
plt.ylim(0, 100)
plt.title('予測精度の比較')
plt.ylabel('精度 (%)')

for i, v in enumerate(accuracies):
    plt.text(i, v + 1, f'{v:.1f}%', ha='center')

plt.tight_layout()
plt.show()

# 結果の詳細表示
print(f"データ総数: {len(df):,}件")
print(f"学習データ: {len(X_train):,}件")
print(f"テストデータ: {len(X_test):,}件")
print(f"\n学習データの精度: {accuracies[0]:.1f}%")
print(f"テストデータの精度: {accuracies[1]:.1f}%")
目次

データ分割の重要ポイント

  1. 分割の意味
  • 学習データ:模擬テスト
  • テストデータ:本番テスト
  • この分け方で「暗記」と「理解」の違いが分かる
  1. 分割のポイント
  • test_size=0.25:4分の1をテストデータに
  • stratify=y:目的変数の比率を維持
  • random_state:結果の再現性を確保
  1. よくある失敗と対策
  • データ漏洩:テストデータを学習に使わない
  • 不均衡データ:stratifyで比率を維持
  • 過学習:学習データとテストデータの精度差を監視

実践的なアドバイス

  1. 分割比率の選び方
  • 基本は75:25か80:20
  • データが少ない場合:90:10も検討
  • データが多い場合:70:30も可能
  1. 精度評価のコツ
  • 学習データの精度が高すぎる→過学習の可能性
  • テストデータの精度が極端に低い→汎化性能に問題
  • 両者の差が10%以上→モデルの見直しが必要

このように、適切なデータ分割は機械学習の成功に不可欠です。上記のコードを実行すると、分割の様子と精度の違いを視覚的に確認できます。

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

コメント

コメントする

CAPTCHA


目次