def fit_predict_model()

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