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

機械学習データ前処理:ヒストグラムと箱ひげ図でデータを「診る」方法【Pandas入門】

Tags: データ前処理, Pandas, データ分析, 可視化, ヒストグラム, 箱ひげ図

はじめに:データ前処理における「データの理解」の重要性

機械学習モデルを構築する際、その性能は使用するデータの質に大きく依存します。データ前処理は、生のデータをモデルが学習しやすい形に整えるための重要なステップです。この前処理の初期段階で特に重要となるのが、「データの理解」です。

データには様々な特徴や傾向が隠されています。例えば、特定の数値が極端に多い、値が特定の範囲に集中している、あるいは一部に異常な値(外れ値)が含まれている、といった性質です。これらのデータの「かたち」や「ばらつき」を把握しないままモデル構築に進むと、期待通りの結果が得られなかったり、モデルの予測精度が低下したりする可能性があります。

特に、ビジネスの現場で様々なデータを扱う皆様にとって、データがどのような状態にあるのかを知ることは、次のアクションを決める上でも非常に役立ちます。例えば、顧客の年齢層や購買金額の分布を見ることで、ターゲット層への理解が深まります。

この「データの理解」において、データの分布を視覚的に捉えることは非常に効果的です。本記事では、データの分布を確認するための代表的なグラフである「ヒストグラム」と「箱ひげ図」について、その読み方と、Pythonのデータ分析ライブラリであるPandasを使った簡単な実装方法を解説します。プログラミング経験が少ない方でも理解できるよう、丁寧に進めてまいります。

なぜデータの分布を確認する必要があるのか

データの分布を理解することは、機械学習モデルの選択や前処理の方法を検討する上で不可欠です。

このように、データの分布を知ることは、データそのものが持つ情報を引き出し、より適切なデータ前処理やモデル選択を行うための重要な手がかりとなります。

データの分布を見る代表的な方法:ヒストグラム

ヒストグラムは、数値データがどのような範囲に、どれくらいの頻度で出現するかを示すグラフです。データの分布の形状、中心、ばらつき、歪み、そして複数の山があるかなどを視覚的に捉えることができます。

ヒストグラムの概念と読み方

ヒストグラムを作成するには、まずデータの値の範囲をいくつかの「階級」に分割します。次に、各階級にいくつのデータが含まれるか(これを「度数」と呼びます)を数え、その度数を縦軸、階級を横軸として棒グラフで表現します。

例えば、ある商品の購入金額データがあったとします。 1. 購入金額の範囲を「0円〜1000円」「1001円〜2000円」「2001円〜3000円」...のように階級に分けます。 2. 各階級に該当する購入金額の件数を数えます。 3. それぞれの階級に対して、対応する件数の高さの棒を描きます。

ヒストグラムを見ると、購入金額がどの価格帯に集中しているか、高い購入金額の人はどのくらいいるか、といった情報が一目でわかります。山の高いところがデータが集中している階級であり、山の形が左右対称か、どちらかに偏っているかなどで分布の傾向を把握できます。

Pandasを使ったヒストグラムの作成

Pandasでは、DataFrameやSeriesに対してhist()メソッドを使うことで簡単にヒストグラムを作成できます。

例として、以下のPandas DataFrameを使用します。これは、あるECサイトの顧客の「年齢」と「年間購入金額(円)」のデータです。

import pandas as pd
import numpy as np

# ダミーデータの作成
np.random.seed(0)
data = {
    '年齢': np.random.randint(18, 70, 100),
    '年間購入金額': np.random.randint(1000, 50000, 100)
}
df = pd.DataFrame(data)

print(df.head())
   年齢  年間購入金額
0  53     22681
1  60     16842
2  41     47015
3  56      4017
4  27     28207

「年齢」データのヒストグラムを作成してみましょう。

# 「年齢」カラムのヒストグラムを作成
df['年齢'].hist()
# Jupyter Notebookやスクリプトで実行する場合、以下の行でグラフが表示されます
# import matplotlib.pyplot as plt
# plt.show()

このコードを実行すると、「年齢」データのヒストグラムが表示されます(実行環境によります)。このヒストグラムを見ることで、顧客の年齢層がどのように分布しているか、特定の年齢層に偏りがあるかなどを視覚的に確認できます。例えば、20代後半と40代後半に山がある、といった傾向が読み取れるかもしれません。

次に、「年間購入金額」のヒストグラムも見てみましょう。

# 「年間購入金額」カラムのヒストグラムを作成
df['年間購入金額'].hist(bins=20) # binsで階級の数を指定できます
# import matplotlib.pyplot as plt
# plt.show()

bins=20のように引数を指定することで、階級の数を調整できます。データの性質に合わせて階級数を調整することで、より適切な分布の形状を捉えることができます。年間購入金額のヒストグラムからは、購入金額が低い層に集中しているか、高額購入者がどの程度いるかなどが分かります。もし、非常に高い購入金額のデータが数件だけ離れて表示されていれば、それは外れ値の可能性を示唆します。

データの分布を見る代表的な方法:箱ひげ図

箱ひげ図は、データのばらつきを把握し、特に複数のグループ間で比較するのに便利なグラフです。ヒストグラムがデータの全体的な形状を詳細に示すのに対し、箱ひげ図はデータの要約統計量(中央値、四分位数など)をシンプルに表現します。

箱ひげ図の概念と読み方

箱ひげ図は、以下の要素で構成されます。

箱ひげ図を見ることで、データの中央値、ばらつきの範囲(箱とひげの長さ)、そして外れ値候補の存在を素早く確認できます。また、複数の箱ひげ図を並べることで、グループ間の比較が容易になります。例えば、性別ごとの年間購入金額の分布の違いなどを比較できます。

Pandasを使った箱ひげ図の作成

Pandasでは、DataFrameに対してboxplot()メソッドを使うことで箱ひげ図を作成できます。

先ほどの顧客データを使用します。

# 「年間購入金額」カラムの箱ひげ図を作成
df.boxplot(column='年間購入金額')
# import matplotlib.pyplot as plt
# plt.show()

このコードを実行すると、「年間購入金額」の箱ひげ図が表示されます。箱の位置で中央値とデータの集中範囲(Q1からQ3)を、ひげの長さでばらつきを、ひげの外側の点で外れ値候補を確認できます。もし、ひげの外側に点が多数表示されていれば、そのデータには多くの外れ値候補が含まれている可能性が高いと判断できます。

複数の数値カラムがある場合に、まとめて箱ひげ図を作成することも可能です。

# 複数の数値カラムの箱ひげ図をまとめて作成
# df.boxplot(column=['年齢', '年間購入金額'])
# import matplotlib.pyplot as plt
# plt.show()

(注:この例では年齢と購入金額でスケールが大きく異なるため、まとめて表示すると見づらい可能性があります。実際には、似たスケールのカラムや、カテゴリ別に分けて表示することが多いです。)

ヒストグラムと箱ひげ図の使い分け

ヒストグラムと箱ひげ図は、どちらもデータの分布を視覚化するツールですが、それぞれ得意とする表現が異なります。

したがって、以下のように使い分けるのが効果的です。

データ分析の初期段階では、両方のグラフを作成して多角的にデータを確認することが推奨されます。

まとめ

本記事では、機械学習のデータ前処理において重要となる「データの分布の理解」に焦点を当て、そのための代表的な可視化手法であるヒストグラムと箱ひげ図について解説しました。

どちらのグラフも、Pandasを使えば数行のコードで簡単に作成できます。データの前処理を行う際は、まずこれらのグラフを使ってデータを「診る」ことから始めてみてください。データの状態を正確に把握することが、その後の適切な前処理やモデル構築の成功につながる第一歩となります。

データの分布理解の次は、欠損値の処理、カテゴリ変数のエンコーディング、数値データのスケーリングなど、様々な前処理ステップが控えています。本サイトでは、これらのステップについても順を追って解説してまいりますので、ぜひ他の記事もご参照いただき、機械学習のためのデータ前処理スキルを体系的に習得していただければ幸いです。