このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
データの着信に応じた RUL 予測の更新
この例では、テスト対象のマシンから新しいデータ着信するのに応じて RUL の予測を更新する方法を説明します。例においては、学習データのアンサンブルを使用して RUL モデルに学習させます。その後、単一マシンからのテスト データのシーケンスをループ処理して、新しいデータごとに RUL の予測を更新します。例は、新しいデータが利用可能となるのに応じた RUL の予測の進展を示します。
この例では exponentialDegradationModel
を使用します。劣化の RUL モデルでは、新しいデータ点が利用可能になった時点で、新しい RUL 値を予測する前に、まず劣化モデルを更新しなければなりません。他の RUL モデル タイプではこの更新手順をスキップしてください。
学習用データと予測用データ
2 つの変数 TestData
と TrainingData
で構成される、この例のデータを読み込みます。
load UpdateRULExampleData
TestData
は何らかの状態インジケーター Condition
の値を含む table で、最初のいくつかのエントリで示されるように、1 時間ごとに記録されています。
head(TestData,5)
Time Condition ____ _________ 1 1.0552 2 1.2013 3 0.79781 4 1.09 5 1.0324
TrainingData
は table の cell 配列で、TestData
と同じ変数を含んでいます。TrainingData
の各 cell は、アンサンブルの 1 つのマシンの寿命を通した、状態インジケーター Condition
の故障までの進展を表します。
予測モデルの学習
TrainingData
を使用して、RUL 予測のために exponentialDegradationModel
モデルに学習させます。fit
コマンドは、TrainingData
の履歴記録に基づいてモデルのパラメーターの事前確率分布を推定します。学習済みモデルの Prior
プロパティにはモデル パラメーター Theta
、Beta
、Rho
が含まれます (これらのモデル パラメーターの詳細については、exponentialDegradationModel
を参照)。
mdl = exponentialDegradationModel('LifeTimeUnit',"hours"); fit(mdl,TrainingData,"Time","Condition") mdl.Prior
ans = struct with fields:
Theta: 0.6762
ThetaVariance: 0.0727
Beta: 0.0583
BetaVariance: 1.8383e-04
Rho: -0.2811
劣化モデルは、状態インジケーターの測定で初期勾配が現れた後に、劣化の追跡の信頼性が最も高くなります。勾配の検出レベルを 0.1 に設定して、この勾配に達するまでは RUL の予測を行わないようモデルに指定します (測定値が既に劣化を開始したコンポーネントのものであることが前もってわかっている場合、mdl.SlopeDetectionLevel = []
と設定して勾配の検出を無効にできます)。
mdl.SlopeDetectionLevel = 0.1;
各タイム ステップでの RUL の予測
マシンの耐用寿命末期を示す、状態インジケーターのしきい値を定義します。RUL は、テスト マシンの状態インジケーターがこのしきい値に達するまでの予測残り時間です。
threshold = 400;
RUL の予測の場合、TestData
は t
= 1 時間で開始し、新しいデータ サンプルが 1 時間ごとに利用可能になるものと仮定します。一般に、新しいデータ点ごとに新しい RUL 値を予測できます。この例の劣化モデルの場合、TestData
をループ処理し、update
コマンドを使って新しいデータ点ごとにモデルを更新します。その後、信頼性の高い RUL 予測のために十分な勾配の変化をモデルが検出するかどうかをチェックします。検出する場合は、predictRUL
コマンドを使用して新しい RUL 値を予測します。推定の変化を観察するには、推定された RUL 値とそれに関連する信頼区間を、ベクトル EstRUL
および CI
にそれぞれ保存します。同様に、モデル パラメーターを配列 ModelParameters
に保存します。
N = height(TestData); EstRUL = hours(zeros(N,1)); CI = hours(zeros(N,2)); ModelParameters = zeros(N,3); for t = 1:N CurrentDataSample = TestData(t,:); update(mdl,CurrentDataSample) ModelParameters(t,:) = [mdl.Theta mdl.Beta mdl.Rho]; % Compute RUL only if the data indicates a change in slope. if ~isempty(mdl.SlopeDetectionInstant) [EstRUL(t),CI(t,:)] = predictRUL(mdl,CurrentDataSample,threshold); end end
推定されたモデル パラメーターの値の軌跡をプロットします。劣化データで勾配が検出された後、値は急速に変化します。利用できるデータ点の数が多くなるほど、収束する傾向にあります。
Time = hours(1:N)'; tStart = mdl.SlopeDetectionInstant; % slope detection time instant plot(Time,ModelParameters); hold on plot([tStart, tStart],[-1,2],'k--') legend({'\theta(t)','\beta(t)','\rho(t)','Slope detection instant'},'Location','best') hold off
予測された RUL をプロットして、利用できる劣化データの増加に伴うその変化を観察します。劣化データに勾配が検出されるまで、新しい RUL の推定値はありません。その後、予測された RUL は予想どおり時間とともに減少します。predictRUL
は、RUL 値の統計的な分布を計算します。予測された RUL の信頼限界は時間とともに狭まります。
plot(Time,EstRUL,'b.-',Time,CI,'c',tStart,EstRUL(hours(tStart)),'r*') title('Estimated RUL at Time t') xlabel('t') ylabel('Estimated RUL') legend({'Predicted RUL','Confidence bound','Confidence bound','Slope detection instant'})
参考
exponentialDegradationModel
| predictRUL
| update