← 作品一覧

振動異常検知ラボ

合成振動データの生成器と、特徴量の抽出からモデル評価までを動かす異常検知の実験環境を作りました。学習と評価で機械を分けるとスコアが下がり、情報の漏れによる過大評価が見える形になりました。

  • Python
  • NumPy
  • pandas
  • scikit-learn
  • pytest
  • Matplotlib
コード公開

この作品

機械ごとの個体差と運転条件を持つ振動データの生成器、特徴量の抽出、評価スクリプトを作りました。同じ機械の記録が学習側と評価側に入ると、故障ではなく機械の個性を覚えてしまう状況を再現します。

仕組み

流れを見る図の動きやスクロールで、流れを追えます。動きはオフです。工程を選んで読めます。

機械単位で分ける

合成した振動の記録を機械ごとに分け、評価する機械の記録をすべて学習から外します。

運転条件の違いをそろえる

学習側の正常な記録だけで運転条件による違いをそろえる基準を作り、整えた特徴でモデルを学習します。

機械ごとの判定を比べる

未知の機械の予測を機械単位にまとめ、学習と評価に同じ機械が混ざる分け方とも比べます。

試行を混ぜる分割と、機械を丸ごと評価側に残す分割で、同じモデルを比較しました。運転条件に応じた標準化では、学習側の正常データだけから基準を作り、試行ごとの予測を機械単位に集約します。

独立した検証スクリプトでパッケージと結果を照合し、生成する機械の集団を変えて評価を繰り返しました。

記録から分かること

試行を混ぜた評価で高かった値は、機械ごとに分けると下がりました。運転条件で特徴量を整える効果も、モデルや評価指標によって変わります。モデルを選ぶ前に、何を未知のデータとして残すか、どの単位で判定するかを問うための実験です。

合成データの反復生成
30 シード
平均の機械単位 F1:試行分割 → 機械分割
1.000 → 0.758

確かめた範囲

ここで測ったのは合成データ上の振る舞いで、実機の故障検知性能を示すものではありません。