AI/Prophet

[Prophet] Prophet Tutorial #7 - Outliers

zamezzz 2018. 7. 18. 22:00

 [Ai] Prophet Tutorial #7 - Outliers



오늘은 Prophet 7번째 포스팅입니다. 주제는 Outliers입니다.

https://facebook.github.io/prophet/docs/outliers.html


Outliers를 다루는 방법에 대해 살펴보도록 하겠습니다.


Outliers는 크게 2가지 경우에서 적용할 수 있습니다.


먼저 첫 번째 경우는 docs의 예제를 통해 살펴보겠습니다.


 Outliers (1)



먼저 위와 같은 예측 그래프가 있다고 합시다.


Prophet의 예측이 정확한 것 같지만, 끝지점에 보이는 Uncertainty Intervals의 크기가


너무 크게 설정이 되어있습니다. 이유는 2010년의 너무 간격이 큰 데이터 값으로 인해


후대의 예측 값까지 지속적으로 영향을 미쳐 마지막엔 이렇게 큰 Uncertainty Intervals


이 발생하게 됩니다.


이를 해결하기 위한 가장 좋은 방법은 데이터를 제거하는 방법입니다.


방법은 아래와 같습니다.


df.loc[(df['ds] > '2010-01-01') & (df['ds'] < '2011-01-01'), 'y'] = None

model = Prophet().fit(df)

fig = model.plot(model.predict(future))


결과 값은 아래와 같습니다. 중간 데이터를 제거한다고 해도 전체적인 예측 값(yhat)에는


큰 영향을 미치는 것 같지는 않습니다.


 Outliers (2)


두 번째는 Outliers가 극단적인 그룹을 형성하는 모습입니다.


이는 전체적인 예측값의 추세에 영원하게 영향을 미치게 됩니다.


이를 보정하는 방법은 위와 같습니다. 해당 기간의 데이터 값을 삭제해주면 되죠.


해당 부분을 제거하면 결과가 어떻게 바뀔지 같이 살펴보겠습니다.


기존 저의 코드에는 상한값이 500으로 정해져있어서 Outliers에 대한 처리가 기본적으로


되어 있었습니다. 하지만 이 피쳐를 적용하기 위해 상한값을 1000으로 올리고, Outliers


데이터 값들을 제거해보도록 하겠습니다. 적용 전 예측 그래프는 아래와 같습니다.



400을 넘어 무려 800가까이 있는 Outliers들이 있는데요. 여기서 400이 넘는 값들을


먼저 Outliers로 판단하여 삭제하겠습니다. 결과는 아래와 같습니다.



예측 그래프의 추세가 변화된 모습이 느껴지시나요 ? 2017년 8월 솟아올랐던 추세가


가라앉았습니다 18년 4월쯤 약간 올랐던 추세도 평탄해졌네요.


그럼 실제 데이터 값을 비교하여 얼마나 개선되었나 살펴보겠습니다.


지난번 Holiday Effects를 적용한 결과는 88.9%였습니다.


Date

실제

 예측

정확도

2018-06-01

138

136.52

99%

2018-06-02

91

107.88

84%

2018-06-03

89

115.42

77%

2018-06-04

239

188.53

79%

2018-06-05

165

164.79

100%

2018-06-06

128

135.38

95%

2018-06-07

188

181.14

96%

2018-06-08

173

162.57

94%

2018-06-09

114

106.57

93%

합계

90.8%


이번 피쳐를 적용한 결과는 90.8%의 정확도입니다. 소폭이긴 하지만 상승하였습니다!



지나친 Outliers들은 결과 예측에 악영향을 끼친다고 생각해도 되겠네요.


오랜만에 한층 더 업그레이드 된 것 같아 기쁘네요.


몇 개의 피쳐들만 더 살펴보면 Prophet의 튜토리얼이 마무리 될 것 같습니다.


마무리 이후에는 좀 더 큰 양의 데이터를 예측해보고자 합니다.


그럼 감사합니다

반응형