機械学習データ前処理入門

機械学習データ前処理:変数間の繋がりを見つける相関分析の基本【Pandas+Seaborn入門】

Tags: 機械学習, データ前処理, 相関分析, Pandas, Seaborn

はじめに:データ間の「繋がり」を理解する重要性

機械学習モデルを構築する際、単にデータを集めるだけでは良い結果が得られないことがほとんどです。データの中には、モデルにとって有用な情報もあれば、そうでない情報、あるいはモデルの学習を妨げる情報も含まれています。そこで重要になるのが、データ前処理です。

データ前処理の目的の一つは、モデルがデータをより効率的かつ正確に学習できるように、データの質を高め、形を整えることです。この過程で、データに含まれるそれぞれの「変数」(列)が、互いにどのような関係を持っているのかを理解することが非常に役立ちます。変数間の関係性を知ることで、どの変数が重要そうか、あるいは逆にどの変数が冗長かといった洞察を得ることができ、より適切な特徴量(モデルに入力する変数)を選択したり、モデルの解釈を深めたりすることにつながります。

本記事では、データ間の関係性を数値とグラフで明らかにする「相関分析」の基本について解説します。特に、Pythonの代表的なデータ分析ライブラリであるPandasと、データの可視化に特化したライブラリSeabornを使って、実際にどのように相関分析を行うのか、具体的なコード例を交えてご紹介します。

データ分析や機械学習プロジェクトにこれから取り組むビジネスパーソンの方にとって、相関分析はデータの理解を深めるための強力なツールとなります。ぜひ、その基本的な考え方と実践方法を身につけてください。

相関分析とは何か?

相関分析とは、2つ以上の変数間にどのような関係性があるかを、統計的な手法を用いて調べる分析です。具体的には、一方の変数が増加するともう一方の変数も増加する関係なのか(正の相関)、一方の変数が増加するともう一方が減少する関係なのか(負の相関)、あるいは特に関係性が見られないのか(無相関)などを明らかにします。

この関係性の強さや方向を示す指標として、相関係数がよく用いられます。相関係数は一般的に-1から+1までの値を取ります。

相関係数が0.7以上であれば強い相関、0.4〜0.7であれば中程度の相関、0.2〜0.4であれば弱い相関、0.2未満であればほとんど相関なし、といったように判断されることがありますが、この基準は分野やデータの種類によって異なります。重要なのは、単に数値を見るだけでなく、その関係性がビジネスや分析の目的と照らしてどのような意味を持つのかを考えることです。

なぜデータ前処理で相関分析が重要なのか?

相関分析は、機械学習モデル構築におけるデータ前処理段階で、主に以下の目的のために利用されます。

  1. 重要な特徴量の特定: 目的変数(予測したい変数)と強い相関を持つ説明変数(入力変数)は、モデルにとって予測に役立つ可能性が高いと考えられます。相関分析を通じて、どの変数をモデルに使うべきかのヒントを得ることができます。
  2. 多重共線性の検出: 説明変数同士が互いに強い相関を持っている状態を「多重共線性(たじゅうきょうせんせい)」と呼びます。多重共線性があると、モデルの係数解釈が難しくなったり、モデルが不安定になったりする(例:少しデータが変わるだけで結果が大きく変動する)ことがあります。相関分析は、この多重共線性を引き起こしている可能性のある変数ペアを見つけるのに役立ちます。
  3. 冗長な特徴量の削減: 複数の説明変数が互いに非常に強い相関を持っている場合、それらは似たような情報を含んでいると考えられます。このような場合、全ての特徴量を使うとモデルが複雑になりすぎる可能性があるため、相関の高い変数群から一つだけを選ぶなどして、特徴量を削減することが検討されます。これは、モデルの過学習(特定のデータには適合するが、未知のデータには適合しない状態)を防ぐためにも有効です。

Pandasを使った相関行列の計算

Pandasライブラリを使えば、データフレーム内の数値変数間の相関係数を簡単に計算できます。.corr()メソッドを使用します。

まず、分析対象となるサンプルデータを作成します。ここでは、製品の広告費、販売価格、販売個数、顧客満足度(数値化)、競合製品価格といった変数を持つデータフレームを想定します。

import pandas as pd
import numpy as np

# サンプルデータの作成
data = {
    '広告費': [10, 15, 20, 25, 30, 35, 40, 45, 50, 55],
    '販売価格': [100, 95, 90, 88, 85, 82, 80, 78, 75, 70],
    '販売個数': [50, 60, 70, 75, 80, 85, 90, 95, 100, 110],
    '顧客満足度': [4.0, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 4.9],
    '競合製品価格': [105, 100, 98, 95, 93, 90, 88, 85, 83, 80],
    '製品コスト': [50, 52, 55, 56, 58, 60, 61, 63, 65, 68]
}
df = pd.DataFrame(data)

print("サンプルデータフレーム:")
print(df)

このデータフレームに対して、相関行列を計算してみましょう。.corr()メソッドを呼び出すだけです。デフォルトではピアソン相関係数が計算されます。

# 相関行列の計算
correlation_matrix = df.corr()

print("\n相関行列:")
print(correlation_matrix)

出力された相関行列は、各行と各列がデータフレームの変数を示しており、セルに入る数値が対応する変数間の相関係数です。対角線上の値は常に1となります(同じ変数同士の相関は完全な正の相関)。

例えば、上記のサンプルデータで計算すると、以下のような結果が得られる可能性があります。

相関行列:
            広告費    販売価格    販売個数   顧客満足度  競合製品価格    製品コスト
広告費      1.000000 -0.994842  0.991534  0.998772 -0.997365  0.992086
販売価格    -0.994842  1.000000 -0.998547 -0.991319  0.997775 -0.999309
販売個数     0.991534 -0.998547  1.000000  0.988825 -0.998254  0.997401
顧客満足度    0.998772 -0.991319  0.988825  1.000000 -0.994692  0.988825
競合製品価格   -0.997365  0.997775 -0.998254 -0.994692  1.000000 -0.998933
製品コスト    0.992086 -0.999309  0.997401  0.988825 -0.998933  1.000000

この表から、例えば「広告費」と「販売個数」の間には0.99という非常に強い正の相関があること、「販売価格」と「販売個数」の間には-0.99という非常に強い負の相関があることなどが読み取れます。また、「広告費」と「顧客満足度」の間にも強い正の相関が見られます。

相関行列の可視化(ヒートマップ)

相関行列は数値の羅列であるため、変数が多い場合は全体を把握するのが難しくなります。そこで役立つのが、相関行列を色で表現するヒートマップです。Seabornライブラリを使うと、簡単に美しいヒートマップを作成できます。

import seaborn as sns
import matplotlib.pyplot as plt

# 相関行列をヒートマップで可視化
plt.figure(figsize=(8, 6)) # 図のサイズを指定
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', fmt=".2f", linewidths=.5)
plt.title('変数間の相関ヒートマップ')
plt.show()

ヒートマップを見ることで、色とその濃淡によって変数間の相関の強さと方向を直感的に把握できます。例えば、上記のコードでサンプルデータを可視化すると、以下のようなヒートマップが得られるでしょう。

相関ヒートマップの概念図 (※LLMは図を直接生成できないため、これは概念を示すイメージです。実際のヒートマップは、上記のコードを実行することで得られます。)

このヒートマップでは、色が濃い赤や濃い青ほど相関が強いことを示します。赤いセルは正の相関、青いセルは負の相関です。例えば、「販売価格」と「販売個数」のセルが濃い青になっていることから、強い負の相関があることが視覚的に確認できます。

相関分析から得られる示唆と注意点

相関分析によって、データに関する様々な示唆を得られます。

ただし、相関分析を行う上でいくつか注意点があります。

これらの注意点を理解した上で相関分析の結果を解釈することが大切です。

まとめ

本記事では、機械学習のためのデータ前処理において重要となる相関分析の基本的な考え方と、PandasおよびSeabornを使った実践的な方法を解説しました。

相関分析は、データに含まれる変数間の関係性を数値である相関係数や、視覚的に分かりやすいヒートマップとして表現することで、データの構造を理解し、機械学習モデルに使う特徴量を選択したり、多重共線性を検出したりする上で非常に役立ちます。

データ前処理の初期段階で相関分析を行うことで、データに対する理解が深まり、その後の特徴量エンジニアリングやモデル選択の精度を高めることができます。

ただし、相関は因果関係ではないこと、非線形な関係や外れ値に注意が必要であることを忘れてはなりません。

データ前処理は、機械学習モデルの成功に不可欠なステップです。本記事で紹介した相関分析を、ぜひ皆さんのデータ分析プロセスに取り入れてみてください。