Мощный генетический алгоритм для временных рядов

Привет всем, добро пожаловать обратно в другую интересную тему генетического подхода к временным рядам/последовательным данным.

Мы уже видели в нашем предыдущем обсуждении, как генетический подход работает для алгоритмов машинного обучения, предназначенных для более высокой точности пропускной способности,

Вот ссылка на случай, если вы не сможете понять, о чем я говорю.



Сегодня мы рассмотрим тот же подход для данных временных рядов, используя пакет под названием AutoTS.

Давайте начнем

#AutoTS
from autots import AutoTS
from autots.models.model_list import model_lists
print(model_lists)

Прохладный? у нас есть множество моделей временных рядов, включая ансамбль, который я покажу вам позже.

Теперь давайте загрузим данные.

#default data
from autots.datasets import load_monthly
#data was in long format
df_long = load_monthly(long=True)

# Инициализировать AutoTS с другими параметрами

model = AutoTS(
    forecast_length=3,
    frequency='infer',
    ensemble='simple',
    max_generations=5,
    num_validations=2,
)
model = model.fit(df_long, date_col='datetime', value_col='value', id_col='series_id')
#help(AutoTS) 

Будьте терпеливы, это требует времени, так как он должен пройти через множество итераций алгоритмов.

# Print the name of the best model
print(model)

Мы также можем просмотреть оценки точности модели.

#accuracy score
model.results()
#aggregated from cross validation
validation_results = model.results("validation")

Из списка оценок точности модели вы также можете увидеть выделенное выше из столбца «Модель «Ансамбль», и его низкая точность подтверждает одну из теорий, согласно которой неправда, что ансамбль всегда работает лучше.

Поскольку мы получили лучшую модель, а также другие оценки точности модели. теперь пришло время получить прогнозные значения.

prediction = model.predict()
forecasts_df = prediction.forecast
upper_forecasts_df = prediction.upper_forecast
lower_forecasts_df = prediction.lower_forecast
#or
forecasts_df1 = prediction.long_form_results()
upper_forecasts_df1 = prediction.long_form_results()
lower_forecasts_df1 = prediction.long_form_results()

Давайте возьмем другой вариант использования, чтобы соответствовать нашей настройке.

Что, если мы хотим работать в нескольких списках моделей и иметь больший или меньший вес для определенной функции.

from autots import AutoTS
from autots.datasets import load_hourly
df_wide = load_hourly(long=False)
# here we care most about traffic volume, all other series assumed to be weight of 1
weights_hourly = {'traffic_volume': 20}

Теперь мы определим список моделей

model_list = [
    'LastValueNaive',
    'GLS',
    'ETS',
    'AverageValueNaive',
]
model = AutoTS(
    forecast_length=49,
    frequency='infer',
    prediction_interval=0.95,
    ensemble=['simple', 'horizontal-min'],
    max_generations=5,
    num_validations=2,
    validation_method='seasonal 168',
    model_list=model_list,
    transformer_list='all',
    models_to_validate=0.2,
    drop_most_recent=1,
    n_jobs='auto',
)

После этого мы теперь должны определить вес, подгоняя модель под наши данные.

model = model.fit(
    df_wide,
    weights=weights_hourly,
)
prediction = model.predict()
forecasts_df = prediction.forecast

Экспортировать модель тоже довольно просто.

#EXPORTING############################################
# after fitting an AutoTS model
example_filename = "example_export.csv"  # .csv/.json
model.export_template(example_filename, models='best',
                      n=15, max_per_model_class=3)
forecast_length = 3
# on new training
model = AutoTS(forecast_length=forecast_length,
               frequency='infer', max_generations=0,
               num_validations=0, verbose=0)
model = model.import_template(example_filename, method='only') # method='add on'
print("Overwrite template is: {}".format(str(model.initial_template)))

Опять же, что, если мы хотим запустить одну модель, вот быстрый улов

#Running just one model ################################################################
from autots import load_daily, model_forecast
df = load_daily(long=False)  # long or non-numeric data won't work with this function
df_forecast = model_forecast(
    model_name="AverageValueNaive",
    model_param_dict={'method': 'Mean'},
    model_transform_dict={
        'fillna': 'mean',
        'transformations': {'0': 'DifferencedTransformer'},
        'transformation_params': {'0': {}}
    },
    df_train=df,
    forecast_length=12,
    frequency='infer',
    prediction_interval=0.9,
    no_negatives=False,
    # future_regressor_train=future_regressor_train2d,
    # future_regressor_forecast=future_regressor_forecast2d,
    random_seed=321,
    verbose=0,
    n_jobs="auto",
)
df_forecast.forecast.head(5)

Вот и все! Вот репо пакета для подробного изучения

https://winedarksea.github.io/AutoTS/build/html/source/intro.html#autots

Вам понравилось? если да, дайте мне знать…….просмотрите другие мои статьи, включая «Генетический алгоритм с Tpot».



Гарантирую, вам они тоже понравятся. До скорых встреч с еще одной интересной темой.

Некоторые из моих альтернативных сайтов в Интернете: Facebook, Instagram, Udemy, Blogger, Issuu и другие.

Также доступно на Quora @ https://www.quora.com/profile/Rupak-Bob-Roy

Хорошего дня.