🐷

SMOTE(Synthetic Minority Over-sampling Technique)とは?

2025/03/12に公開

1. はじめに

機械学習のデータセットにおいて、クラスの不均衡(Imbalanced Data)は、モデルの学習に悪影響を及ぼすことがあります。例えば、医療診断データや詐欺検出データでは、陽性(Positive)クラスが少なく、陰性(Negative)クラスが圧倒的に多いケースが一般的です。このような場合、モデルは多数派クラスに偏った学習をし、少数派クラスを正しく予測できないことがあります。

この問題を解決するために、「SMOTE(Synthetic Minority Over-sampling Technique)」が提案されました。本記事では、SMOTEの仕組みと使い方について解説します。

2. SMOTEの概要

SMOTEは、少数派クラスのデータを単純にコピーするのではなく、新しい合成データを生成することでデータセットのバランスを改善する手法です。これにより、過学習(Overfitting)のリスクを抑えながら、少数派クラスのサンプル数を増やすことができます。

3. SMOTEのアルゴリズム

SMOTEの基本的なアルゴリズムは以下のステップで構成されます。

  1. 少数派クラスの各サンプルに対して、k個の最近傍(Nearest Neighbors)を見つける
  2. ランダムに選ばれた最近傍サンプルとの間で、新しいデータポイントを作成する
  3. 新しく生成されたサンプルをデータセットに追加する

具体的には、次のように合成データを作成します。

[ x_{new} = x_i + \lambda \times (x_{nn} - x_i) ]

ここで、

  • ( x_i ) は少数派クラスの元のサンプル
  • ( x_{nn} ) は最近傍サンプル
  • ( \lambda ) は 0 から 1 の間のランダムな値

このようにして、少数派クラスのデータが連続的に分布するように新しいサンプルが生成されます。

4. SMOTEのメリットとデメリット

メリット

  • 単純なデータのコピーではなく、新しいデータを生成するため、過学習のリスクを軽減できる。
  • クラスのバランスが改善されることで、機械学習モデルの予測性能が向上する。
  • k近傍法(KNN)を活用するため、分布を考慮したデータ拡張が可能。

デメリット

  • 合成データを生成するため、元のデータセットの分布を正確に再現できるとは限らない。
  • 高次元データでは、データの近傍関係が正しく機能しないことがある(次元の呪い)。
  • ノイズを含んだデータが過剰に生成される可能性がある。

5. SMOTEの実装方法(Python)

PythonでSMOTEを実装するには、imbalanced-learn ライブラリを使用します。

from imblearn.over_sampling import SMOTE
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification

# ダミーデータの作成
X, y = make_classification(n_classes=2, class_sep=2, weights=[0.1, 0.9],
                           n_informative=3, n_redundant=1, flip_y=0,
                           n_features=10, n_clusters_per_class=1, n_samples=1000, random_state=42)

# SMOTEの適用
smote = SMOTE(sampling_strategy='auto', random_state=42)
X_resampled, y_resampled = smote.fit_resample(X, y)

print("Before SMOTE:", {label: count for label, count in zip(*np.unique(y, return_counts=True))})
print("After SMOTE:", {label: count for label, count in zip(*np.unique(y_resampled, return_counts=True))})

このコードでは、

  • make_classification を使って不均衡データを作成
  • SMOTE を適用し、クラスのバランスを調整
  • クラスの分布を確認する

という流れで処理を行っています。

6. まとめ

SMOTEは、不均衡データ問題を解決するための強力な手法の一つです。少数派クラスのデータをコピーするのではなく、新しいデータを合成することで、モデルの性能を向上させることができます。

ただし、SMOTEの適用には注意が必要です。データの特性を考慮し、適切なパラメータ設定を行うことが重要です。実際のデータセットに適用する際は、交差検証などを用いて慎重に評価することをおすすめします。


このブログ記事が、SMOTEの理解に役立つことを願っています。ご質問があれば、お気軽にコメントしてください!

Discussion