- データマイニングの概要
データマイニングの基本的なフローは以下の通りです。
- データ読み込みとデータ探索(統計的分析)
- データの読み込みと概観
- 単変量分析:個々の変数がラベルに及ぼす影響
- 多変量分析:複数の変数がラベルに及ぼす影響
- 統計的なプロット
- 相関性分析(特徴量相関性ヒートマップ)
- データクリーニングと前処理
- 欠損値処理
- 標準化、正規化
- 特徴エンジニアリング
- モデルの構築と予測
- データセットの分割
- 複数モデルの評価と最適化:クロスバリデーション、グリッドサーチ
- アンサンブル学習:ブースティングアルゴリズム(XGBoost、GBDT、LightGBM)、多種類のアルゴリズムの組み合わせ(ニューラルネットワーク)
- 特徴エンジニアリングの概要
特徴エンジニアリングは機械学習のワークフローにおいて重要な部分であり、元のデータをモデルが理解できる形式に変換する過程です。与えられたデータから最大限の価値を引き出すことが特徴エンジニアリングの役割です。
2016年の調査によると、データサイエンティストの作業時間の80%以上がデータの取得、クリーニング、整理に費やされ、機械学習パイプラインの構築には20%未満しかかかっていないことが明らかになりました。これにより特徴エンジニアリングの重要性が示されています。
特徴エンジニアリングは原始データと特徴量の間で行われ、その任務は原始データを特徴量に翻訳することです。この過程では、データをビジネスロジックをよりよく表現する特徴に変換することで、機械学習の性能を向上させます。
特徴エンジニアリングには主にデータ前処理、特徴選択と抽出などが含まれます。
- 相関性分析
相関性分析とは、2つ以上の変数間の関連性を分析し、それらの関連度を測定することです(線形相関性)。
ヒートマップ(Heatmap)は、データ行列中の数値の大きさや密度を色の濃淡で表示するデータ相関性の可視化ツールです。一般的に、色が濃いほど相関度が高いことを示します。
Pandasのcorr()関数を使用して2つの変数間の相関係数を計算できます。2つの変数XとYのピアソン相関係数 ρX,Y は、それらの共分散 cov(X, Y) をそれぞれの標準偏差 σX と σY の積で除したものです。
この相関係数は変数間の線形相関性のみを測定します。つまり、相関係数が高いほど、変数間の線形関連性が高いことを示します。
一般的な相関係数には以下があります:
- ピアソン(Pearson)相関係数:最も一般的で、正規分布を仮定する場合に使用されます。正規性は正規分布図で確認でき、散布図はデータの関係を示します。
- スピアマン(Spearman)相関係数:正規分布を仮定しない場合に使用されます。正規性は正規分布図で確認でき、散布図はデータの関係を示します。
- ケンドール(Kendall)相関係数:一貫性の評価に使用され、通常は非パラメトリック研究(審査員の採点、データランキングなど)で使用されます。
相関の方向によって、相関性は正の相関と負の相関に分けられます。そのため、相関係数の値は常に[-1,1]の範囲内になります。
- -1:完全な負の線形相関
- 0:線形相関なし
- 1:完全な正の線形相関
通常、以下の範囲に基づいて変数の正の相関強度を判断します。
| 相関係数 | 正の相関強度 |
|---|---|
| 0.8-1.0 | 非常に強い相関または完全な相関 |
| 0.6-0.8 | 強い相関 |
| 0.4-0.6 | 中程度の相関 |
| 0.2-0.4 | 弱い相関 |
| 0.0-0.2 | 非常に弱い相関または無相関 |
ヒートマップを描画することで、各特徴量間の相関性を調査し、特徴量間に多重共線性があるかどうかを調べることができます。
1)相関係数の計算
# 特徴量間の相関係数を計算
data_corr = data[['PassengerId', 'Survived', 'Pclass', 'Age', 'SibSp', 'Parch', 'Fare']]
print(data_corr.corr().to_string())
2)相関性ヒートマップの描画
SeabornはMatplotlibに基づくPythonのデータ可視化ライブラリで、Matplotlibよりも高度に抽象化されており、グラフの描画をより簡単かつ迅速に行うことができます。
以下はSeabornを使用して相関性ヒートマップを描画するAPIです。
'''
sns.heatmap()の一般的なパラメータ
- annot: 各セルに値を表示するかどうか
- fmt: セル内のデータの表示形式(例: 小数点以下2桁: ".2f")
- center: 色の中心値を指定し、ヒートマップの色の濃淡を調整
- linewidths: 各セルの境界線の幅
- cmap: ヒートマップの塗りつぶし色(例: summer(黄から緑)、summer_r(緑から黄)、GnBu(緑から青)、OrRd(オレンジから赤)、Blues、RdBu_r)
'''
import seaborn as sns
import matplotlib.pyplot as plt
# 相関性ヒートマップの描画
plt.figure(figsize=(10, 8))
sns.heatmap(data_corr.corr(), annot=True, fmt=".2f", center=0, linewidths=0.5, cmap="coolwarm")
plt.show()