Main Content

데이터가 수신됨에 따라 RUL 예측 업데이트하기

이 예제에서는 테스트 중인 기계로부터 새로운 데이터가 수신됨에 따라 RUL 예측을 업데이트하는 방법을 보여줍니다. 이 예제에서는 훈련 데이터 앙상블을 사용하여 RUL 모델을 훈련시킵니다. 그런 다음 단일 기계에서 가져온 테스트 데이터 시퀀스를 순환하면서 각각의 새로운 데이터 점에 대해 RUL 예측을 업데이트합니다. 이 예제에서는 새로운 데이터가 생김에 따라 RUL 예측이 변경되는 것을 보여줍니다.

이 예제에서는 exponentialDegradationModel을 사용합니다. 성능 저하 RUL 모델에서는 새로운 데이터 점이 생기면 먼저 성능 저하 모델을 업데이트한 후에 새로운 RUL 값을 예측해야 합니다. 다른 RUL 모델 유형에서는 이 업데이트 단계를 건너뜁니다.

훈련 및 예측을 위한 데이터

이 예제에서 사용할 데이터를 불러옵니다. 데이터에는 변수 TestDataTrainingData가 있습니다.

load UpdateRULExampleData

TestData는 아래에 나와 있는 처음 몇 개의 요소를 보고 알 수 있듯이 매 시간 기록된 상태 지표 Condition의 값을 포함하는 테이블입니다.

head(TestData,5)
    Time    Condition
    ____    _________

     1        1.0552 
     2        1.2013 
     3       0.79781 
     4          1.09 
     5        1.0324 

TrainingDataTestData와 동일한 변수를 갖는 테이블로 구성된 셀형 배열입니다. TrainingData의 각 셀은 앙상블에 있는 하나의 기계가 수명 기간 동안 상태 지표 Condition의 고장까지 이르는 변화를 나타냅니다.

예측 모델 훈련시키기

RUL 예측을 위해 TrainingData를 사용하여 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시에 시작하고 매 시간 새로운 데이터 샘플이 생긴다고 가정합니다. 일반적으로는 각각의 새로운 데이터 점을 사용하여 새로운 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'})

참고 항목

| |

관련 항목