近年、機械学習がビジネスの様々な分野で活用されており、データを使った意思決定の重要性はますます高まっています。
しかし、機械学習を成功させるためには、データをどのように準備するかが極めて重要です。その中でも「データ処理」と「特徴量選択」は、モデルの精度やパフォーマンスに大きな影響を与える重要なステップです。
データ処理は、生のデータを機械学習モデルに適した形に変換するプロセスです。欠損データの補完やカテゴリカルデータの変換、数値データのスケーリングなど、様々な処理が含まれます。
一方、特徴量選択は、予測モデルにとって有効なデータの特徴を選び出す作業です。すべてのデータがモデルにとって有益とは限らず、無関係な特徴量を取り除くことでモデルのパフォーマンスを向上させることができます。
今回は、データ処理と特徴量選択の基本的な流れと、それらの最適な順序について解説していきます。
Contents
データ処理と特徴量選択の基本的な流れ
機械学習モデルを構築する際には、まずデータを準備する必要があります。
このデータ準備のプロセスには、大きく分けて「データ処理」と「特徴量選択」という二つの重要なステップが含まれます。
ここでは、それぞれのステップの基本的な流れと目的について解説します。
データ処理の基本
データ処理(データ前処理とも呼ばれる)は、モデルに投入する前にデータをクリーンで使いやすい形にする作業です。
ビジネスデータは通常、欠損値やノイズ、異常値などの問題を含んでおり、そのまま機械学習モデルに使うと正確な結果が得られないことが多いため、以下のような処理が行われます。
欠損値の補完
データセットに欠損値が含まれている場合、そのままでは機械学習モデルで正確な結果を得ることが難しいため、欠損値を適切に処理する必要があります。
一般的な方法として、欠損値を平均値や中央値で補完する方法があります。また、場合によっては欠損の多い行や列を削除することもあります。
以下のデータセットを考えてみましょう。Age
列に欠損値(NaN
)が含まれています。
Name | Age | Salary |
---|---|---|
Alice | 25 | 50000 |
Bob | NaN | 45000 |
Charlie | 30 | 55000 |
Dave | NaN | 60000 |
この場合、Age
列の欠損値を列全体の平均値で補完することができます。
Age
列の平均値は (25 + 30) / 2 = 27.5
ですので、NaN
の部分に 27.5 を補完します。
補完後のデータは次のようになります。
Name | Age | Salary |
---|---|---|
Alice | 25 | 50000 |
Bob | 27.5 | 45000 |
Charlie | 30 | 55000 |
Dave | 27.5 | 60000 |
カテゴリカルデータのエンコーディング
機械学習モデルの多くは、数値データしか扱うことができません。
そのため、性別や地域などのカテゴリカルデータを数値に変換する必要があります。
この変換には、One-HotエンコーディングやOrdinalエンコーディングといった手法が使われます。
One-Hotエンコーディングは、カテゴリごとに新しい列を作成し、各カテゴリに該当する場合に1を、該当しない場合に0を割り当てる方法です。
次のデータセットでは、City
(都市)の列がカテゴリカルデータです。
Name | City | Salary |
---|---|---|
Alice | Tokyo | 50000 |
Bob | Osaka | 45000 |
Charlie | Tokyo | 55000 |
Dave | Nagoya | 60000 |
これをOne-Hotエンコーディングで変換すると、City
列が以下のように3つの列に展開されます。
Name | Salary | City_Tokyo | City_Osaka | City_Nagoya |
---|---|---|---|---|
Alice | 50000 | 1 | 0 | 0 |
Bob | 45000 | 0 | 1 | 0 |
Charlie | 55000 | 1 | 0 | 0 |
Dave | 60000 | 0 | 0 | 1 |
Ordinalエンコーディングは、カテゴリに順序がある場合に、その順序を数値で表現する方法です。
例えば、Education
(学歴)という列が「高校卒」「大学卒」「大学院卒」という順序を持つ場合、この順序を数値に変換します。
次のデータセットを考えます。
Name | Education | Salary |
---|---|---|
Alice | 大学卒 | 50000 |
Bob | 高校卒 | 45000 |
Charlie | 大学院卒 | 55000 |
Dave | 大学卒 | 60000 |
この場合、Education
列を次のように数値に変換します。
- 高校卒: 1
- 大学卒: 2
- 大学院卒: 3
Name | Education | Salary |
---|---|---|
Alice | 2 | 50000 |
Bob | 1 | 45000 |
Charlie | 3 | 55000 |
Dave | 2 | 60000 |
データのスケーリング
数値データが異なるスケールである場合、機械学習モデルの学習に影響を与えることがあります。
例えば、売上が数百万円単位、商品個数が1~10の範囲にある場合、スケールが大きく異なるため、モデルが適切に学習できないことがあります。
これを防ぐために、標準化や正規化といったスケーリング手法を用います。
標準化は、データを平均0、標準偏差1に揃える手法です。これは、スケールに依存しないモデルでのパフォーマンス向上に役立ちます。
次のデータセットを考えます。
Product | Sales (万円) | Units Sold (個) |
---|---|---|
A | 500 | 5 |
B | 300 | 8 |
C | 700 | 10 |
D | 400 | 3 |
Sales
(売上)とUnits Sold
(販売個数)は異なるスケールです。これを標準化すると、データは次のようになります。
標準化の式は次の通りです。
\displaystyle X_{scaled}=\frac{X−\mu}{\sigma}ここで、X
は元の値、μ
は平均、σ
は標準偏差です。
Product | Sales (標準化後) | Units Sold (標準化後) |
---|---|---|
A | 0.45 | -0.44 |
B | -1.34 | 0.88 |
C | 1.78 | 1.76 |
D | -0.11 | -1.32 |
これにより、すべてのデータが平均0、標準偏差1の範囲に揃えられます。
特徴量選択の基本
特徴量選択は、モデルにとって最も影響の大きいデータの特徴(変数)を選び出すプロセスです。
大量のデータの中には、モデルの精度を下げる無関係な特徴量や、逆にモデルを過学習させるリスクのある特徴量も含まれます。
無関係な特徴量の削除
機械学習モデルには、予測に役立たない無関係な特徴量が含まれている場合があります。
これらの無関係な特徴量を残したままにすると、モデルの精度が下がったり、計算が非効率になったりすることがあります。
そこで、モデルに悪影響を及ぼす可能性のある、予測に役立たない変数を削除し、重要な特徴量に焦点を当てることが大切です。
次のデータセットを考えます。
Name | Age | Salary | Favorite Color | Employee ID |
---|---|---|---|---|
Alice | 25 | 50000 | Blue | 1234 |
Bob | 30 | 45000 | Green | 5678 |
Charlie | 35 | 55000 | Red | 9101 |
Dave | 40 | 60000 | Yellow | 1121 |
このデータセットには、Favorite Color
(好きな色)やEmployee ID
(従業員ID)といった無関係な特徴量が含まれています。
例えば、好きな色や従業員IDは、従業員の年齢や給料に基づく予測モデルにおいて役立たない情報です。
これらの特徴量を残しておくと、モデルが無意味なパターンに基づいて学習し、性能が低下する可能性があります。
無関係な特徴量を削除し、重要なデータに絞り込みます。
Name | Age | Salary |
---|---|---|
Alice | 25 | 50000 |
Bob | 30 | 45000 |
Charlie | 35 | 55000 |
Dave | 40 | 60000 |
Favorite Color
やEmployee ID
の列を削除することで、モデルが年齢や給料といった予測に重要なデータに焦点を当てられるようになります。
これにより、モデルの精度が向上し、より効率的な学習が可能になります。
重複した特徴量の削除
データセットには、非常に類似した特徴量が複数存在する場合があります。
これらの重複データがあると、モデルの学習において冗長性が生じ、計算負荷が増加するだけでなく、予測精度も低下する可能性があります。
重複した特徴量を削除することで、データの効率化とモデルの精度向上が期待できます。
次のデータセットを考えます。
Name | Height (cm) | Height (m) | Weight (kg) |
---|---|---|---|
Alice | 160 | 1.6 | 55 |
Bob | 180 | 1.8 | 75 |
Charlie | 170 | 1.7 | 65 |
Dave | 165 | 1.65 | 60 |
このデータセットには、Height (cm)
(センチメートルでの身長)とHeight (m)
(メートルでの身長)という二つの特徴量が含まれています。
これらは同じ情報を異なる単位で表現しているため、実質的に重複しています。
このような重複した特徴量を残しておくと、モデルの学習において冗長性が生じ、計算の効率が悪くなる可能性があります。
一方の重複した特徴量を削除し、データの冗長性を取り除きます。
Name | Height (cm) | Weight (kg) |
---|---|---|
Alice | 160 | 55 |
Bob | 180 | 75 |
Charlie | 170 | 65 |
Dave | 165 | 60 |
Height (m)
の列を削除することで、データが簡潔になり、計算負荷も軽減されます。
このように、重複した特徴量を削除することで、無駄なデータ処理を避け、モデルのパフォーマンスを向上させることができます。
重要な特徴量の選別
機械学習モデルを構築する際、すべての特徴量がモデルの予測に役立つわけではありません。
無関係な特徴量を削除するだけでなく、重要な特徴量を選別することで、モデルの精度を向上させることができます。
これには、フィルターメソッドやラッパーメソッドなどの手法が使われます。
フィルターメソッドは、統計的な基準や相関を用いて特徴量を選別する手法です。
例えば、相関係数を計算し、ターゲット変数と強い相関を持つ特徴量を選ぶ方法です。
次のデータセットを考えます。
Name | Age | Salary | Years at Company | Department | Bonus |
---|---|---|---|---|---|
Alice | 25 | 50000 | 2 | Sales | 5000 |
Bob | 30 | 45000 | 3 | Marketing | 4500 |
Charlie | 35 | 55000 | 4 | Sales | 5500 |
Dave | 40 | 60000 | 5 | HR | 6000 |
ここで、ターゲット変数をSalary
(給料)とし、特徴量を選別します。
Bonus
(ボーナス)は、Salary
と強い相関がある可能性がありますが、Department
(部署)はあまり関連がないかもしれません。
この場合、相関係数に基づいて、Bonus
を重要な特徴量として選び、Department
を削除することができます。
Name | Age | Salary | Years at Company | Bonus |
---|---|---|---|---|
Alice | 25 | 50000 | 2 | 5000 |
Bob | 30 | 45000 | 3 | 4500 |
Charlie | 35 | 55000 | 4 | 5500 |
Dave | 40 | 60000 | 5 | 6000 |
ラッパーメソッドは、機械学習アルゴリズムを用いて特徴量を選別する手法です。
一般的には、モデルのパフォーマンスを評価しながら、特徴量を追加したり削除したりして最適な組み合わせを見つけます。
例えば、ステップワイズ選択や交差検証がよく使われます。
データ処理と特徴量選択の順序
一般的に、データ処理は特徴量選択の前に行われることが多いです。
理由としては、欠損値が存在する状態やカテゴリカルデータが数値化されていない状態では、特徴量選択が正確に機能しないからです。
しかし、一定の条件下では、特徴量選択を先に行う場合もあります。
例えば、無意味な特徴量を最初に削除することで、データ処理の効率が向上するケースがあります。
データ処理が先に行われる理由
機械学習モデルを効果的に構築するためには、データの準備が重要なステップとなります。
その中で、データ処理が特徴量選択よりも先に行われることが一般的です。
これは、データ処理を行わずにモデルを構築すると、データの質が低下し、モデルのパフォーマンスに悪影響を与える可能性があるためです。
欠損データの処理
多くの機械学習アルゴリズムは、欠損データ(NaN値)を扱うことができません。
もし欠損データが存在するままモデルに投入すると、モデルが正しく動作せず、エラーが発生することがあります。
そのため、欠損データを適切に処理(補完または削除)し、クリーンなデータを準備することが不可欠です。
例えば、以下のデータセットを見てみましょう。
Name | Age | Salary | Department |
---|---|---|---|
Alice | 25 | 50000 | Sales |
Bob | NaN | 45000 | Marketing |
Charlie | 35 | NaN | Sales |
Dave | 40 | 60000 | HR |
このデータセットには、Age
やSalary
に欠損値が含まれています。
これらの欠損値を補完せずにモデルを作成すると、エラーが発生したり、正確な予測ができなくなります。
そこで、欠損データを平均値や中央値で補完し、処理を行った後にモデルを構築することが重要です。
カテゴリカルデータのエンコーディング
多くの機械学習アルゴリズムは数値データしか扱うことができません。
例えば、性別や部署といったカテゴリカルデータは、そのままでは機械学習アルゴリズムに適用できません。
そのため、カテゴリカルデータを数値に変換(エンコーディング)する必要があります。
例として、以下のようなデータセットを考えます。
Name | Age | Salary | Department |
---|---|---|---|
Alice | 25 | 50000 | Sales |
Bob | 30 | 45000 | Marketing |
Charlie | 35 | 55000 | Sales |
Dave | 40 | 60000 | HR |
この場合、Department
(部署)はカテゴリカルデータです。
One-Hotエンコーディングを使用して、このデータを次のように変換します。
Name | Age | Salary | Sales | Marketing | HR |
---|---|---|---|---|---|
Alice | 25 | 50000 | 1 | 0 | 0 |
Bob | 30 | 45000 | 0 | 1 | 0 |
Charlie | 35 | 55000 | 1 | 0 | 0 |
Dave | 40 | 60000 | 0 | 0 | 1 |
このようにカテゴリカルデータを数値に変換することで、アルゴリズムがデータを扱いやすくなり、精度の高い予測を可能にします。
数値データのスケーリング
データのスケールが大きく異なる場合、モデルの学習に悪影響を与えることがあります。
例えば、売上(数百万円単位)と商品個数(1~10個)ではスケールが大きく異なるため、スケーリングを行わないと売上のデータばかりがモデルに影響を与えてしまう可能性があります。
この問題を解決するために、データを標準化(平均0、標準偏差1に揃える)したり、正規化(0から1の範囲に揃える)することで、すべての特徴量が同じスケールで扱われるようにします。
データ処理後のモデル構築
データ処理を行うことで、データがクリーンで扱いやすくなり、機械学習モデルのパフォーマンスが向上します。
例えば、欠損値が補完され、カテゴリカルデータがエンコードされ、数値データがスケーリングされた後、モデルはより正確な予測を行うことができるようになります。
特徴量選択が先に行われる場合
場合によっては特徴量選択が先に行われることもあります。
データ処理をすべて終えた後で特徴量選択を行うのが一般的ですが、特定の状況では、特徴量選択を最初に行うことでデータの処理が効率的になる場合もあります。
特徴量選択が先に行われる具体的なケースについて説明します。
定数や準定数の特徴量の削除
機械学習モデルにおいて、定数(あるいはほぼ定数)となっている特徴量は、予測に役立たないばかりか、モデルの学習に悪影響を与える可能性があります。
これらの特徴量は、どのデータポイントでも同じ値を持つため、モデルに対して何の情報も提供しません。
このような特徴量をデータ処理の前に削除することで、無駄な計算コストを削減できます。
次のデータセットを考えます。
Name | Age | Salary | Company Code |
---|---|---|---|
Alice | 25 | 50000 | A123 |
Bob | 30 | 45000 | A123 |
Charlie | 35 | 55000 | A123 |
Dave | 40 | 60000 | A123 |
この場合、Company Code
列はすべてのデータポイントで同じ値を持っています。
このような定数の特徴量はモデルに何の情報も提供しないため、削除します。
Name | Age | Salary |
---|---|---|
Alice | 25 | 50000 |
Bob | 30 | 45000 |
Charlie | 35 | 55000 |
Dave | 40 | 60000 |
このように、無意味な定数の特徴量を削除することで、モデルに有益なデータのみを使用できるようになります。
重複した特徴量の削除
重複している、もしくは非常に類似している特徴量は、データ処理の前に削除することが推奨されます。
これにより、データ処理の負担を軽減し、よりシンプルで効率的なモデル作成が可能になります。
次のデータセットを考えます。
Name | Height (cm) | Height (m) | Weight (kg) |
---|---|---|---|
Alice | 160 | 1.6 | 55 |
Bob | 180 | 1.8 | 75 |
Charlie | 170 | 1.7 | 65 |
Dave | 165 | 1.65 | 60 |
Height (cm)
とHeight (m)
は同じ情報を異なる単位で表現しているため、重複しています。
この場合、どちらか一方を削除してシンプルなデータセットにすることが望ましいです。
Name | Height (cm) | Weight (kg) |
---|---|---|
Alice | 160 | 55 |
Bob | 180 | 75 |
Charlie | 170 | 65 |
Dave | 165 | 60 |
これにより、データの冗長性が減り、処理がより効率的になります。
重要な特徴量を事前に選別する
データの前処理を行う前に、モデルの予測に最も影響を与える特徴量を事前に選別する場合もあります。
特徴量選別を行うことで、不要な特徴量を削除し、重要な特徴量に絞り込むことで、データ処理やモデルの学習が効率化されます。
例えば、相関が非常に低い特徴量や予測に無関係な特徴量を前もって削除することで、後続の処理が簡略化され、処理時間も短縮されます。
データ処理と特徴量選択のハイブリッドアプローチ
データ処理と特徴量選択の順序は、必ずしも「どちらが先」という固定されたルールがあるわけではなく、状況に応じて柔軟に対応する必要があります。
実際には、データ処理と特徴量選択をハイブリッドアプローチとして組み合わせることが多く、データの性質やプロジェクトの目標に応じて、両者を繰り返し適用することが有効です。
今回のまとめ
今回は、「機械学習でのデータ処理と特徴量選択の最適な順序とは?」というお話しをしました。
データ処理と特徴量選択は、機械学習における重要なステップであり、その順序や方法によってモデルのパフォーマンスに大きく影響を与えます。
一般的には、欠損値の補完やカテゴリカルデータのエンコーディング、数値データのスケーリングといったデータ処理が先に行われます。
これにより、データがクリーンでモデルに適した形に整えられ、より精度の高い予測が可能になります。
一方、特定の状況では、無関係な特徴量や重複した特徴量を削除するなど、特徴量選択を先に行うことでデータ処理の負担を軽減し、モデルの効率化を図ることができます。
また、データ処理と特徴量選択をインタラクティブに繰り返すハイブリッドアプローチも有効です。
状況に応じて両者を柔軟に組み合わせることで、データ準備を最適化し、より効果的な機械学習モデルの構築が可能になります。
どの手法が最適かはデータの性質やビジネス目標によって異なりますが、データ処理と特徴量選択をバランス良く適用することで、モデルのパフォーマンスを最大限に引き出すことが重要です。