『音による故障予知の教科書たたき台:4.9 クラス不均衡への対処』LLMと一緒に書いてみた—AIが導く研究メモ

4. データ前処理  

4.9 クラス不均衡への対処

クラス不均衡とは、分類したいデータのうち「あるクラス(多数派)が圧倒的に多く、別のクラス(少数派)がとても少ない」状態を指す。たとえば、正常データがほとんどで異常データがごく少数しかない場合が典型で、このまま学習すると「いつも正常と答えるだけ」で高い正解率に見えてしまい、肝心の異常を見落とす危険が高くなる。まず押さえるべきポイントは二つ。1) 評価指標は正解率だけに頼らず、少数派の見つけやすさを測れる指標を使うこと、2) 学習データや学習方法を工夫して、少数派にもしっかり注意を向けさせること、である。[1][2][3][4][5]

評価指標の選び方は不均衡対処の出発点になる。正解率は多数派が極端に多いと見かけ上高く出やすく、頼りにならない。代わりに、少数派に注目する「再現率(どれだけ取りこぼさないか)」と「適合率(見つけたもののどれだけが本物か)」、その調和平均であるF1スコアを併用するのが定石である。さらに曲線指標として、ROC曲線(再現率と偽陽性率の関係)とPR曲線(適合率と再現率の関係)を使い分ける。ROCはクラス分布の影響を受けにくい全体的な性能像を与え、PRは少数派(陽性)に焦点を当てた実用的な見え方を与えるので、不均衡が大きいときはPR曲線とその面積(PR-AUC)も重視するのがよい。[2][6][7][3][4][5]

学習データを整える基本策として「再サンプリング」がある。大きく二系統で、1) 少数派を増やすオーバーサンプリング、2) 多数派を減らすアンダーサンプリング、である。最も簡単なオーバーサンプリングは「少数派のデータを複製して増やす」方法だが、同じものを増やすだけなので過学習を招きやすい。そこで広く用いられるのがSMOTE(合成少数派オーバーサンプリング)で、少数派同士の近傍点を結んで、その間に新しい合成サンプルを作る発想だ。これにより重複ではなく“似ているけれど新しい”点を補充でき、決定境界の学習を助けやすい。一方で、境界付近のノイジーな合成点が混ざるリスクもあり、適用後の検証が欠かせない。アンダーサンプリングは多数派を間引いて釣り合いを取る方法で、学習は軽くなるが情報損失のリスクがある。無作為に削る方法のほか、多数派の代表性を保つためにクラスタ中心で置き換える手法や、少数派に近い多数派だけを残すNearMissなどのバリエーションもある。[8][9][10][11][12][1]

再サンプリングに加えて「コスト感度学習(学習時の重み付け)」も有力である。誤分類の重み(コスト)をクラスごとに変え、少数派を間違えたときのコストを大きく設定して学習器に反映する。実装面では、学習アルゴリズムにクラス重みを与える、あるいは損失関数にコスト行列を組み込む、といった方法が一般的だ。コストの初期値としては、不均衡比(多数/少数の比)を目安に重みを割り当てる実務的ヒューリスティクスが紹介されているが、データの性質によって最適値は変わるため、ハイパーパラメータとして探索するのが現実的である。重み付けは再サンプリングと併用でき、モデルやデータに合わせて柔軟に効くのが利点だ。[13][14][15][16]

実務での設計は次の順序が失敗しにくい。第一に、評価設計。目的に応じて再現率(取りこぼし低減)と適合率(誤警報低減)のバランス点を決め、F1やPR-AUC、必要ならROC-AUCもあわせて採用しておく。閾値は固定せず、PRやROCの曲線を見ながら、現場の許容度に合わせて最終決定する。第二に、学習データの整形。基準としてSMOTEなどのオーバーサンプリング、または軽度のアンダーサンプリングを単独で試し、次に両者の併用(多数派の削減+少数派の合成)や、類似手法(Borderline-SMOTEなど)を比較検証する。第三に、学習アルゴリズム側の工夫。クラス重み/サンプル重みを導入し、損失関数を不均衡に合わせて調整する。ブースティングやバギングでは、重みや再サンプリング戦略を組み込みやすく、性能と計算量の折り合いも取りやすい。[12][16][1][13]

評価時の注意点も重要だ。データ分割は必ず「層化」する。これは、訓練・検証・テストの各分割でクラス比が全体分布に近づくように分ける方法で、偶然の偏りを防ぐ。時系列や設備ごとにデータが塊で存在するときは、時系列分割やグループ分割を用いて“未来情報の混入”や“同一機の情報漏えい”を避ける。前処理(標準化など)の統計量は訓練データのみに基づいて算出し、検証・テストにはそのパラメータを適用する(データ漏えい防止)。[6][4][5]

判断の基準づくりも実務の肝だ。故障予知では「取りこぼし(見逃し)」と「誤警報」の重みが必ずしも同じではない。例えば、見逃しのコストが桁違いに大きいなら、再現率を優先して閾値を下げ、誤警報は後段の点検で絞る運用に寄せるべきだ。この方針は、そのままコスト感度学習のコスト行列に落とし込める。評価段階では、PR曲線を用いて「必要な再現率に対して適合率がどれだけ確保できるか」を確認し、合わせてROC曲線でモデル固有の識別力(不均衡に依存しにくい見え方)も点検しておくと、過大評価・過小評価を避けやすい。[3][5][2]

代表的な落とし穴と回避策を挙げる。- 誤り1:正解率でモデルを選ぶ。回避:F1、PR-AUC、再現率・適合率の所望点での数値を比較。- 誤り2:少数派を複製しすぎて過学習。回避:SMOTEなどの合成系を試し、境界ノイズに注意しつつ検証、必要なら軽いアンダーサンプリングと併用。- 誤り3:層化せずに分割して、検証に少数派がほぼ入らない。回避:層化分割を徹底。- 誤り4:現場のコスト構造を無視して閾値を固定。回避:PR/ROCの曲線に基づく閾値調整と、コスト感度学習による重み付けの併用。- 誤り5:前処理を全体で計算してから分割。回避:訓練→検証/テストの順で適用。[14][5][1][13]

故障予知への具体化としては、次のような手順が実用的である。1) データ把握:クラス比(正常:異常)を確認し、評価指標(F1、PR-AUC、所望の再現率・適合率)を決める。2) 分割と漏えい対策:層化分割、必要なら時系列/グループ分割、前処理は訓練基準。3) 基本策:SMOTEまたは軽度のアンダーサンプリングを適用し、ベースライン(重みなし)とクラス重みありを比較。4) 併用策:オーバー+アンダーのバランス、境界を意識したSMOTEの派生、コスト感度学習を加えてグリッド探索。5) 閾値最適化:PR曲線上で再現率の下限(見逃し許容)を満たす点から適合率最大の閾値を選ぶ。6) 運用設計:誤警報は二次判定(追加特徴や人の点検)で絞り、モデルは高再現率寄りを優先。これにより、少数派(異常)の見落としを抑えつつ、現場の点検コストに合わせた実用的バランスに到達できる。[5][1][2][13][3]

最後に、意思決定の指針をまとめる。- まず指標を正しく選ぶ(F1、PR-AUC、必要再現率)。- 次にデータを整える(SMOTE等の再サンプリング、層化分割)。- さらに学習を賢くする(クラス重み・コスト感度学習)。- 最後に閾値を運用条件で決める(PR/ROCに基づく最適化)。この四段構えを守れば、クラス不均衡の厳しい現場でも、見落としと誤警報のバランスを制御しながら、信頼できる予知モデルに近づける。[1][13][14][3] [1] https://www.datasciencecentral.com/exploring-oversampling-and-under-sampling-core-techniques-for-balancing-imbalanced-datasets-in-ml/

[2] https://pmc.ncbi.nlm.nih.gov/articles/PMC11240176/

[3] https://aicompetence.org/auc-vs-precision-recall-curve-imbalanced-datasets/

[4] https://developers.google.com/machine-learning/crash-course/classification/accuracy-precision-recall

[5] https://www.machinelearningmastery.com/roc-curves-and-precision-recall-curves-for-classification-in-python/

[6] https://towardsdatascience.com/courage-to-learn-ml-a-deeper-dive-into-f1-recall-precision-and-roc-curves-d5c0a46e5eb7/

[7] https://www.numberanalytics.com/blog/precision-recall-guide-ai

[8] https://www.kaggle.com/code/residentmario/undersampling-and-oversampling-imbalanced-data

[9] https://www.blog.trainindata.com/overcoming-class-imbalance-with-smote/

[10] https://towardsdatascience.com/oversampling-and-undersampling-explained-a-visual-guide-with-mini-2d-dataset-1155577d3091/

[11] https://www.geeksforgeeks.org/ml-handling-imbalanced-data-with-smote-and-near-miss-algorithm-in-python/

[12] https://www.nature.com/articles/s41598-025-05791-7

[13] https://www.machinelearningmastery.com/cost-sensitive-learning-for-imbalanced-classification/

[14] https://fraud-detection-handbook.github.io/fraud-detection-handbook/Chapter_6_ImbalancedLearning/CostSensitive.html

[15] https://www.nb-data.com/p/implement-cost-sensitive-learning

[16] https://www.ismll.uni-hildesheim.de/pub/pdfs/Nguyen_et_al_IJCNN2010_CSL.pdf

[17] https://heartbeat.comet.ml/cost-sensitive-learning-for-imbalanced-data-93370404a54b

[18] https://substack.com/home/post/p-164989680

[19] https://www.geeksforgeeks.org/python/how-to-implement-cost-sensitive-learning-in-decision-trees/

[20] https://talent500.com/blog/a-comprehensive-guide-to-handling-imbalanced-datasets-in-classification-problems/

※本ページは、AIの活用や研究に関連する原理・機器・デバイスについて学ぶために、個人的に整理・記述しているものです。内容には誤りや見落としが含まれている可能性もありますので、もしお気づきの点やご助言等ございましたら、ご連絡いただけますと幸いです。

※本ページの内容は、個人的な学習および情報整理を目的として提供しているものであり、その正確性、完全性、有用性等についていかなる保証も行いません。本ページの情報を利用したこと、または利用できなかったことによって発生した損害(直接的・間接的・特別・偶発的・結果的損害を含みますが、これらに限りません)について、当方は一切責任を負いません。ご利用は利用者ご自身の責任でお願いいたします。

おすすめの記事