Source code for codes.funcs

"""
.. moduleauthor:: UF31246
"""

import pandas
from statsmodels.tsa.statespace.sarimax import SARIMAX


def _combine_into_df(x):
    
    """list to dataframe"""
    
    result = pandas.DataFrame()
    for i in x:
        result = result.append(i)
    
    return result


[docs]def wfa(actual, forecast, epsilon): """return wfa """ abs_error = abs(actual - forecast) wfa = max(0, 1 - 2*sum(abs_error)/(epsilon + sum(forecast) + sum(actual))) return wfa
[docs]def trend_num_to_str(trend_num): """return trend string given a number from param space""" if int(round(trend_num)) == 0: trend = 'n' elif int(round(trend_num)) == 1: trend = 'c' elif int(round(trend_num)) == 2: trend = 't' else: trend = 'ct' return trend
[docs]def sarimax_predict( training_endog_var, holdout_endog_var, exog_var, training_length, holdout_length, holdout_exog, order, seasonal_order, trend ): """sarimax predict""" try: sarimax_fit = SARIMAX(endog = training_endog_var, exog = exog_var, order = order, seasonal_order = seasonal_order, trend = trend ).fit() except Exception as e: if 'maxlag' in str(e): try: sarimax_fit = SARIMAX(endog = training_endog_var, exog = exog_var, order = order, seasonal_order = (0,0,0,0), trend = trend ).fit() except Exception as e: print(e) sarimax_fit = None elif 'enforce_invertibility' in str(e): try: sarimax_fit = SARIMAX(endog = training_endog_var, exog = exog_var, order = order, seasonal_order = seasonal_order, trend = trend ).fit(start_params=[0, 0, 0, 1]) except Exception as e: print(e) sarimax_fit = None else: sarimax_fit = None if sarimax_fit is not None: try: y_pred = sarimax_fit.predict(start = training_length, end = training_length + holdout_length - 1, exog = holdout_exog ) except: y_pred = None else: y_pred = None return (holdout_endog_var, y_pred)