どうもニコイチです。長かったPythonでデータ分析を始める初心者向けガイドも終盤に突入し、次回が最後となります。いままで色々扱ってみておわかりの通りPythonを使ったデータ分析は、初心者でも取り組みやすいツールやライブラリが豊富に揃っています。このガイドでは、ROC曲線の描画や決定木の可視化を通じて、データ分析の基礎を学びます。実際に提供されたCSVファイル(data.csv)を使って、具体的なステップを詳しく説明します。
目次
データの読み込みと準備
まず、CSVファイルを読み込み、データを確認します。
import pandas as pd
# CSVファイルを読み込み
data = pd.read_csv('data.csv')
# データの最初の5行を確認
print(data.head())
# データの概要を確認
print(data.info())
データの分割
データを訓練データとテストデータに分割します。
from sklearn.model_selection import train_test_split
# 特徴量とターゲットを分ける
X = data.drop(columns=['target']) # 'target'は目的変数の列名に置き換えてください
y = data['target']
# 訓練データとテストデータに分割
train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=42)
決定木モデルの作成
次に、3つの異なる深さの決定木モデルを作成します。
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import roc_auc_score
# 3つのモデルを作成
models = {
'max_depth=2': DecisionTreeClassifier(max_depth=2, random_state=42),
'max_depth=10': DecisionTreeClassifier(max_depth=10, random_state=42),
'max_depth=6': DecisionTreeClassifier(max_depth=6, random_state=42)
}
# モデルの学習と評価
predictions = {}
auc_scores = {}
for label, model in models.items():
model.fit(train_X, train_y)
pred_y = model.predict_proba(test_X)[:, 1]
predictions[label] = pred_y
auc_scores[label] = roc_auc_score(test_y, pred_y)
print(f'{label}: AUC = {auc_scores[label]:.2f}')
ROC曲線の描画
次に、ROC曲線を描画して比較します。
from sklearn.metrics import roc_curve
from matplotlib import pyplot as plt
# ROC曲線の計算と描画
plt.figure(figsize=(10, 7))
for label, pred_y in predictions.items():
fpr, tpr, _ = roc_curve(test_y, pred_y)
plt.plot(fpr, tpr, label=f'{label} (AUC={auc_scores[label]:.2f})')
# 対角線の描画
plt.plot([0, 1], [0, 1], color='black', linestyle='--')
# グラフの設定
plt.title('ROC Curve Comparison')
plt.xlabel('False Positive Rate (FPR)')
plt.ylabel('True Positive Rate (TPR)')
plt.legend()
plt.grid()
plt.show()
決定木の可視化
最も適したモデルの構造を可視化します。
from sklearn.tree import export_graphviz
from matplotlib import pyplot as plt
from PIL import Image
import pydotplus
import io
# 最適なモデルの選択
best_model_label = max(auc_scores, key=auc_scores.get)
best_model = models[best_model_label]
# 決定木の描画
export_graphviz(best_model, out_file='tree.dot', feature_names=X.columns, class_names=['0', '1'], filled=True, rounded=True)
g = pydotplus.graph_from_dot_file('tree.dot')
gg = g.create_png()
img = io.BytesIO(gg)
img2 = Image.open(img)
# グラフの表示
plt.figure(figsize=(img2.width / 100, img2.height / 100), dpi=75)
plt.imshow(img2)
plt.axis('off')
plt.show()
初心者がつまづきやすいポイント
- データの列名が不明:適切な列名を指定する必要があります。
- ライブラリのインストール:
pydotplus
やPillow
など、使用するライブラリがインストールされているか確認しましょう。pip install pydotplus pillow
- データの形式:目的変数がカテゴリカルであることを確認してください。
次のステップ
- データの前処理や特徴選択を学ぶ
- 他のモデル(ランダムフォレストやSVM)を試す
- 実際のビジネスデータに適用してみる
長かったデータ分析ですが、今回は次回が最終回です。
コメント