in assets/functions/ml_pipeline/batch_anomaly_detection/app.py [0:0]
def fit_predict_model(meter, timeseries):
m = Prophet(daily_seasonality=False, yearly_seasonality=True, weekly_seasonality=True,
seasonality_mode='multiplicative',
interval_width=.98,
changepoint_range=.8)
m.add_country_holidays(country_name='UK')
m.add_regressor('weekend')
m = m.fit(timeseries)
forecast = m.predict(timeseries)
forecast['consumption'] = timeseries['y'].reset_index(drop=True)
forecast['meter_id'] = meter
forecast['anomaly'] = 0
forecast.loc[forecast['consumption'] > forecast['yhat_upper'], 'anomaly'] = 1
forecast.loc[forecast['consumption'] < forecast['yhat_lower'], 'anomaly'] = -1
# anomaly importance
forecast['importance'] = 0
forecast.loc[forecast['anomaly'] == 1, 'importance'] = \
(forecast['consumption'] - forecast['yhat_upper']) / forecast['consumption']
forecast.loc[forecast['anomaly'] == -1, 'importance'] = \
(forecast['yhat_lower'] - forecast['consumption']) / forecast['consumption']
return forecast