不均衡データの扱い方:SMOTE・アンダーサンプリングなどの対処法

AIを知りたい
機械学習で「不均衡データ」が問題になるとよく聞くのですが、どういうことですか?

AIエンジニア
不均衡データとは、クラス間でサンプル数が大きく偏っているデータのことです。例えばクレジットカードの不正検知では、正常取引が99.9%で不正が0.1%ということがよくあります。このまま学習すると、モデルは「全部正常」と予測するだけで精度99.9%になってしまいます。

AIを知りたい
精度が高いのに問題があるんですか?

AIエンジニア
はい。精度(Accuracy)は高くても、本当に検出したい少数クラス(不正)を全く見つけられないのが問題です。不正検知の目的は不正を見つけることなのに、「全部正常」と答えるモデルでは意味がありません。不均衡データでは精度以外の評価指標が重要です。
不均衡データ(Imbalanced Data)とは、分類タスクにおいてクラス間のサンプル数に大きな偏りがあるデータセットです。
不正検知、疾病診断、故障予測など実務で非常によく遭遇する問題です。データレベル(リサンプリング)、アルゴリズムレベル(コスト敏感学習)、評価指標の工夫の3つのアプローチで対処します。
リサンプリング手法

AIを知りたい
不均衡データに対処する方法を教えてください。

AIエンジニア
最も基本的なのはリサンプリングです。大きく分けて2つの方向があります。オーバーサンプリングは少数クラスのサンプルを増やす方法、アンダーサンプリングは多数クラスのサンプルを減らす方法です。両方を組み合わせることもあります。

AIを知りたい
SMOTEというのはどんな手法ですか?

AIエンジニア
SMOTE(Synthetic Minority Over-sampling Technique)は少数クラスの合成サンプルを生成するオーバーサンプリング手法です。既存のサンプル間を線形補間して新しいサンプルを作ります。単純な複製と違い、決定境界付近に多様なサンプルを生成できるのが利点です。
| 手法 | 種別 | 方法 | メリット | デメリット |
|---|---|---|---|---|
| ランダムオーバーサンプリング | オーバー | 少数クラスを複製 | シンプル | 過学習しやすい |
| SMOTE | オーバー | 合成サンプル生成 | 多様なサンプル | ノイズも増幅 |
| ADASYN | オーバー | 境界付近を重点生成 | 困難なサンプル重視 | 計算コスト |
| ランダムアンダーサンプリング | アンダー | 多数クラスを削除 | 学習が速い | 情報損失 |
| Tomek Links | アンダー | 境界付近を除去 | 境界が明確に | 効果が小さい |
| SMOTE+Tomek | 組み合わせ | SMOTE後にTomek除去 | バランスが良い | パラメータ調整必要 |
アルゴリズムレベルの対処法

AIを知りたい
データをいじらずにモデル側で対処する方法はありますか?

AIエンジニア
はい。コスト敏感学習(Cost-sensitive Learning)という方法があります。少数クラスの誤分類に大きなペナルティを設定して、モデルが少数クラスを重視するようにします。scikit-learnでは多くの分類器にclass_weightパラメータがあり、「balanced」を指定するだけで自動調整できます。

AIを知りたい
class_weight=”balanced”を設定するだけでいいんですか?

AIエンジニア
はい、最もお手軽な方法です。内部的にはサンプル数の逆数に比例した重みを各クラスに割り当てます。XGBoostやLightGBMではscale_pos_weightパラメータで同様の調整ができます。これはデータを変更しないので、リサンプリングより手軽で安全です。
適切な評価指標の選択

AIを知りたい
不均衡データではどの評価指標を使えばいいですか?

AIエンジニア
Accuracyは使わないのが鉄則です。代わりにF1スコア(PrecisionとRecallのバランス)、PR-AUC(Precision-Recall曲線下の面積)、ROC-AUCを使います。特に不均衡が激しい場合はPR-AUCが最適です。

AIを知りたい
ROC-AUCとPR-AUCはどう違うのですか?

AIエンジニア
ROC-AUCは真陽性率と偽陽性率のトレードオフを見る指標で、クラスの比率に影響されにくい性質があります。一方PR-AUCは適合率と再現率のトレードオフで、少数クラスの検出性能をより正確に反映します。不均衡が99:1以上のケースではPR-AUCを優先しましょう。
| 指標 | 不均衡データでの適性 | 使用場面 |
|---|---|---|
| Accuracy | 不適切 | クラスが均衡している場合のみ |
| F1スコア | 良い | PrecisionとRecallのバランス重視 |
| ROC-AUC | 良い | 全体的な識別性能の評価 |
| PR-AUC | 最適 | 極端な不均衡データ |
まとめ
不均衡データは実務で最も頻繁に遭遇する機械学習の課題の一つです。SMOTE等のリサンプリング、class_weightによるコスト敏感学習、そしてF1やPR-AUCなどの適切な評価指標の3つを組み合わせて対処しましょう。特にclass_weight=”balanced”は手軽かつ効果的な第一歩としておすすめです。
