Обновление предсказания RUL по мере поступления данных

В этом примере показано, как обновить предсказание RUL по мере поступления новых данных с тестируемой машины. В примере вы используете ансамбль обучающих данных для обучения модели RUL. Затем цикл через последовательность тестовых данных с одной машины, обновляя предсказание RUL для каждой новой точки данных. Пример показывает эволюцию предсказания RUL по мере поступления новых данных.

Этот пример использует exponentialDegradationModel. Для моделей RUL деградации, когда новая точка данных становится доступной, необходимо сначала обновить модель деградации, прежде чем прогнозировать новое значение RUL. Для других типов модели RUL пропустите этот шаг обновления.

Данные для обучения и предсказания

Загрузите данные для этого примера, который состоит из двух переменных, TestData и TrainingData.

load UpdateRULExampleData

TestData - таблица, содержащая значение некоторого индикатора состояния, Condition, записывается каждый час, как показывают первые несколько записей.

head(TestData,5)
ans=5×2 table
    Time    Condition
    ____    _________

     1        1.0552 
     2        1.2013 
     3       0.79781 
     4          1.09 
     5        1.0324 

TrainingData - массив ячеек из таблиц, имеющих те же переменные, что и TestData. Каждая камера в TrainingData представляет собой эволюцию отказа индикатора состояния Condition за время жизни одной машины в ансамбле.

Обучите модель предсказания

Использование TrainingData для обучения exponentialDegradationModel модель для RUL- предсказания. The fit команда оценивает априорные для параметров модели на основе исторических записей в TrainingData. The 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 час, и новая выборка данных становится доступной каждый час. В целом, вы можете предсказать новое значение RUL с каждой новой точкой данных. Для модели деградации этого примера цикл через TestData и обновляйте модель с каждой новой точкой данных с помощью update команда. Затем проверьте, обнаруживает ли модель достаточное изменение наклона для надежного предсказания RUL. Если это так, спрогнозируйте новое значение RUL с помощью predictRUL команда. Чтобы наблюдать эволюцию оценки, сохраните предполагаемые значения 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

Figure contains an axes. The axes contains 4 objects of type line. These objects represent \theta(t), \beta(t), \rho(t), Slope detection instant.

Постройте график предсказанного 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'})

Figure contains an axes. The axes with title Estimated RUL at Time t contains 4 objects of type line. These objects represent Predicted RUL, Confidence bound, Slope detection instant.

См. также

| |

Похожие темы