航空業界では、「故障」は許されません。
サーバーがクラッシュしたら再起動すればいいですが、飛行中にジェットエンジンが故障すれば、その結果は壊滅的です。そのため、航空業界は予防保全(必要かどうかに関わらずスケジュール通りに部品を交換する)から予知保全(PdM)(故障する直前に部品を交換する)へと移行しています。
データサイエンティストにとって、これは究極の時系列回帰問題です。目標は、センサーデータ(温度、圧力、振動)に基づいてエンジンの残存耐用年数(RUL)を計算することです。
従来、これには複雑な物理モデルや手動チューニングされたディープラーニングアーキテクチャ(LSTM)が必要でした。しかし最近、自動機械学習(AutoML)が成熟し、手動チューニングを上回るパフォーマンスを発揮できるようになりました。
本ガイドでは、NASA C-MAPSSデータセットを用いた分析に基づき、2つのオープンソースの強力なツール:AWS AutoGluonとH2O.aiを使用してエンジン故障を予測するパイプラインを構築します。
ここでは単に画像を分類するのではなく、多変量時系列データを扱います。パイプラインでは、生のセンサーログを回帰ターゲット(RUL)に変換する必要があります。
有名なNASA商用モジュール式航空推進システムシミュレーション(C-MAPSS)データセットを使用します。これには故障までのシミュレーションデータが含まれています。
データセットは明示的にRULを提供していません。現在のサイクルを提供しています。ターゲットを計算する必要があります。
ロジック: RUL = エンジンの最大サイクル数 - 現在のサイクル数
import pandas as pd # Load dataset (Simulated example structure) # Columns: ['unit_number', 'time_in_cycles', 'sensor_1', ... 'sensor_21'] df = pd.read_csv('train_FD001.txt', sep=" ", header=None) # 1. Calculate the maximum life of each engine unit max_life = df.groupby('unit_number')['time_in_cycles'].max().reset_index() max_life.columns = ['unit_number', 'max_life'] # 2. Merge back to original dataframe df = df.merge(max_life, on='unit_number', how='left') # 3. Calculate RUL (The Target Variable) df['RUL'] = df['max_life'] - df['time_in_cycles'] # Drop columns we don't need for training (like max_life) df = df.drop(columns=['max_life']) print(df[['unit_number', 'time_in_cycles', 'RUL']].head())
予知保全では、単純な「精度」は機能しません。予測がどれだけ外れているかを測定する必要があります。
RMSE(二乗平均平方根誤差)に依存します。
import numpy as np def calculate_rmse(y_true, y_pred): """ y_true: The actual Remaining Useful Life y_pred: The model's prediction """ mse = np.mean((y_true - y_pred)**2) return np.sqrt(mse)
注: 分析ではRMSLE(対数誤差)も強調されています。これは、寿命を過小予測する(早期に故障すると予測する)のは安全ですが、過大予測する(実際より遅く故障すると予測する)のは危険だからです。RMSLEは異なるスケール間で相対誤差をより適切に処理します。
複雑でノイズの多いセンサーデータを、大規模な手動チューニングなしでどちらがより適切に処理できるかを確認するために、2つのフレームワークをテストしました。
AutoGluon(AWSが開発)は、複数のモデル(ニューラルネット、LightGBM、CatBoost)を自動的にスタッキングおよびアンサンブルする戦略を使用します。
コード:
from autogluon.tabular import TabularPredictor # AutoGluon handles feature engineering automatically # 'RUL' is our target label calculated in Phase 1 predictor = TabularPredictor(label='RUL', eval_metric='root_mean_squared_error').fit( train_data=df_train, time_limit=600, # Train for 10 minutes presets='best_quality' ) # Inference y_pred = predictor.predict(df_test) results = predictor.evaluate(df_test) print(f"AutoGluon RMSE: {results['root_mean_squared_error']}")
H2Oは、スケーラブルな分散コンピューティング機能で知られるベテランです。
コード:
import h2o from h2o.automl import H2OAutoML h2o.init() # Convert pandas df to H2O Frame hf_train = h2o.H2OFrame(df_train) hf_test = h2o.H2OFrame(df_test) # Train aml = H2OAutoML(max_models=20, seed=1) aml.train(y='RUL', training_frame=hf_train) # Inference preds = aml.predict(hf_test) perf = aml.leader.model_performance(hf_test) print(f"H2O RMSE: {perf.rmse()}")
分析により、この特定のセンサーデータセットに適用した場合のパフォーマンスに大きな差があることが明らかになりました。
| ライブラリ | 指標 | ターゲット:RUL | 結果(低いほど良い) | |----|----|----|----| | AutoGluon | RMSE | RUL | 14.07 | | H2O | RMSE | RUL | 44.85 |
**分析: \ AutoGluonはH2Oを大きく上回りました(14.07対44.85)。ジェットエンジンの文脈では、14サイクルの誤差範囲はメンテナンスのスケジューリングに許容されます。44サイクルの誤差範囲ではモデルが役に立ちません。
なぜAutoGluonが勝ったのか?
複雑な多変量データを含む産業アプリケーションにおいて、AutoMLはもはやプロトタイピングツールだけではなく、本番環境の機能です。
手動モデル選択からAutoGluonのような自動アンサンブルアプローチに切り替えることで、開発者はエンジニアリング時間を数週間から数時間に削減しながら、優れた精度を達成できます。
開発者への重要なポイント:産業用IoTアプリを構築する際は、フェーズ1(データエンジニアリング)に労力を集中し、センサーログをクリーニングして正しいRULを計算してください。モデル選択はAutoMLに任せましょう。
\


