機械学習モデルを実務で使う際、多くの人が直面するのが「不均衡データ(imbalanced data)」の問題です。
これは、分類タスクにおいてクラス間のデータ数に大きな偏りがある状態を指します。
たとえば、1,000件のうち「正常」950件、「異常」50件といったケースです。
一見、全体精度(accuracy)が高く見えても、実は「少数派クラス(異常)」をほとんど検出できていない。
こうした状況を避けるためには、データの扱い方や評価の仕方に工夫が必要です。
本記事では、不均衡データの問題点から実践的な対策法までを、データ処理・アルゴリズム調整・評価指標・実務運用の4視点で徹底解説します。
不均衡データがもたらす問題
不均衡なデータセットでは、モデルが多数派クラスを優先的に学習してしまい、少数派クラスを「無視する」傾向があります。
結果として「異常検知」や「不正取引検出」、「病気の診断」といった領域では致命的な誤分類を引き起こします。
特に注意すべきは、評価データにも偏りがあると、モデル性能を過大評価してしまう点です。
現実の分布を反映していないテストセットでは、実運用時にRecall(再現率)が急落することもあります。
データレベルでの対策
データレベルのアプローチでは、クラス分布を人工的に調整して「学習しやすいデータ構造」を作ります。
アンダーサンプリング(Under-sampling)
多数派クラスを一部削除して、データバランスを取る方法です。
- 利点:学習コストが低く、単純で高速。
- 欠点:有益なデータまで削除してしまう可能性。
代表手法
- Random Under-Sampling
- Tomek Links(境界上の曖昧なサンプル除去)
- Edited Nearest Neighbors(近傍分類に合わないデータ削除)
オーバーサンプリング(Over-sampling)
少数派クラスのサンプルを増やすことでバランスを取ります。
単純コピーでは過学習しやすいため、近傍点の情報をもとに新サンプルを生成するSMOTE系手法が主流です。
代表手法
- SMOTE(Synthetic Minority Over-sampling Technique)
→ 少数派サンプルとその近傍を線形補間して合成データを作成。 - ADASYN(Adaptive Synthetic Sampling)
→ 分類が難しいサンプルほど多く合成し、学習を重点化。 - Borderline-SMOTE
→ クラス境界付近のデータのみを強調的に生成。
注意点
SMOTE系は境界を滑らかにしすぎて、クラスの境界がぼやけるリスクがあります。適用後は可視化などで分布を確認するのが望ましいです。
データ拡張(Data Augmentation)
画像・音声・テキストのような非構造データでは、少数派データを「変換」により人工的に増やします。
- 画像:回転・反転・彩度変更・ノイズ追加
- テキスト:同義語置換・語順変更・バックトランスレーション
これにより、データ数だけでなく多様性も確保できます。
アルゴリズムレベルでの対策
データ操作ではなく、学習アルゴリズムそのものに不均衡を考慮させる方法です。
重み付き損失関数(Cost-sensitive Learning)
クラスごとに誤分類コストを変え、少数派クラスを重視するよう学習を調整します。
実装例
- scikit-learn:
class_weight='balanced'(ロジスティック回帰、SVMなど) - XGBoost / LightGBM:
scale_pos_weight(正例/負例比に応じて設定) - ニューラルネット:損失関数(例:クロスエントロピー)にクラス重みを付与
この方法はデータ操作を行わないため、情報損失を避けつつバランス補正できます。
アンサンブル学習
複数の分類器を組み合わせてバランスを取る戦略です。
- Balanced Random Forest:各決定木が均等なクラスサンプルで学習。
- EasyEnsemble / BalanceCascade:多数派を複数の部分集合に分け、複数モデルで学習・統合。
こうした手法はアンダーサンプリングの弱点(情報損失)を補いつつ、安定した性能を得られます。
アノマリ検知モデルの活用
極端な不均衡(例:異常が0.1%以下)では、従来の分類ではなく異常検知モデルを用いるのが有効です。
- One-Class SVM:正常データのみで学習し、外れたデータを「異常」と判断。
- Isolation Forest:データをランダムに分割し、孤立しやすい点を異常とみなす。
これらはラベル付き少数派データがほとんどない場合にも適用可能です。
評価指標による対策
不均衡データでは、「Accuracy」だけでは実態を正しく反映できません。
代わりに、以下の指標を重視します。
| 指標 | 意味 |
|---|---|
| Precision(適合率) | 少数派と予測したうち、実際に正解だった割合。 |
| Recall(再現率) | 実際の少数派データのうち、正しく検出できた割合。 |
| F1スコア | PrecisionとRecallの調和平均(バランス評価)。 |
| ROC-AUC | クラス判別能力の全体的な評価。しきい値に依存しにくいが、極端な不均衡では過大評価しやすい。 |
| PR-AUC | Precision-Recall曲線下の面積。不均衡が強い場合はROC-AUCより信頼性が高い。 |
特に異常検知や不正検知のようなタスクでは、PR-AUCが最も現実的な性能指標となります。
マルチクラスや極端な偏りがある場合は、macro-F1やweighted-F1も活用すると良いでしょう。
実務的な戦略
データ収集・補完
最も根本的な解決策は、少数クラスのデータを増やすことです。
難しい場合は、類似領域のデータやシミュレーション結果を補完的に活用します。
しきい値調整(Threshold Tuning)
モデル出力の確率に対して分類のしきい値を変更します。
- Recallを重視するなら、しきい値を下げて少数派を拾う。
- Precisionを重視するなら、しきい値を上げて誤検出を減らす。
最適なしきい値は、ROC曲線やPR曲線からF1最大点を求めることで決定できます。
スコアリング運用
極端な不均衡では「二値分類」ではなく、「異常スコアを出して上位n件を人間が確認」する運用が現実的です。
金融・医療分野で特によく採用されています。
まとめ
| 観点 | 主な対策 | メリット | 注意点 |
|---|---|---|---|
| データレベル | SMOTE / ADASYN / Under-sampling | クラス分布を改善 | 情報損失・ノイズ生成リスク |
| アルゴリズムレベル | 重み付き学習 / アンサンブル | 効率的かつ柔軟 | ハイパーパラメータ調整が必要 |
| 評価指標 | F1 / ROC-AUC / PR-AUC | 公平な性能評価 | 指標解釈に注意 |
| 実務運用 | データ収集 / しきい値最適化 | 現場導入が容易 | コスト・リソースに依存 |
さらに深く学びたい人へ
実装レベルでは以下のライブラリが実務で多用されます。
- imbalanced-learn:
SMOTE,RandomUnderSampler,EasyEnsemble - scikit-learn:
class_weight,precision_recall_curve,roc_auc_score - LightGBM / XGBoost:
scale_pos_weight,eval_metric='aucpr'
これらを組み合わせることで、高精度かつ公平なモデルを構築することができます。
以上、機械学習における不均衡データの対策についてでした。
最後までお読みいただき、ありがとうございました。
