Получение прогноза из нескольких столбцов Python - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть несколько столбцов в наборе данных с годами и категориями. Данные представляют собой данные за 4 года. Я хочу спрогнозировать значение на 5-й год, используя простые методологии временных рядов (из-за меньшего количества данных) в Python. Я использую Pandas для обработки данных. Данные могут быть получены с помощью этого кода -

data = [[2016, 0.9122, 0.088, 0.052, 0.1379, 0.0744
], [2017 ,0.8054 ,0.0625 ,0.1134 ,0.2753 ,0.1318
], [2018 ,0.8564 ,0.042 ,0.0922 ,0.1987 ,0.1279
], [2019 ,0.9476 ,0.1058 ,0.0219 ,0.1 ,0.0697
]]
# Create the pandas DataFrame 
DAT = pd.DataFrame(data, columns = ['YEAR', 'A', 'B', 'C', 'D', 'E']) 

Решение будет добавить 5-ую строку с прогнозным значением для каждого столбца. В наборе данных я сохранил 5 столбцов, но в реальном сценарии у меня есть почти 500, поэтому прогнозирование отдельно невозможно. Я использовал предсказание линейного тренда Холта из-за нехватки строк и пропустил, чтобы разместить здесь коды участков и разложений. Для одного столбца я смог сделать прогноз и добавить его к данным со следующим кодом -

import statsmodels.api as sm
import matplotlib.pyplot as plt
import numpy as np
from statsmodels.tsa.api import ExponentialSmoothing, SimpleExpSmoothing, Holt
import statsmodels.api as sm

# GETTING FORECAST
fit1 = Holt(np.asarray(DAT['A'])).fit(smoothing_level = 0.3,smoothing_slope = 0.1)
Forecast_A = fit1.forecast(1)
Forecast_A[0]

# APPENDING FORECAST FOR ONE COLUMN
FDAT_S = DAT_S[['YEAR', 'A']]

# ADDING FORECASTED ROW

FCAST_ADD = FDAT_S.append(pd.Series([(FDAT_S["YEAR"].max() + 1), fit1.forecast(1)[0]], 
                                    index = FDAT_S.columns ), ignore_index = True)
FCAST_ADD['YEAR'] = FCAST_ADD['YEAR'].round().astype(int)

В R я бы поместил автоарима внутри функции с прогнозом, извлеченным внутри функции, и применил бы его на все столбцы. Но я совершенно новичок в Python и, несмотря на все попытки, у меня нет успеха из-за недостатка опыта. Я изучал список и словари и смог написать так много кода -

# PREDICTION FOR ALL COLUMNS

groups_iter = ['A', 'B', 'C', 'D', 'E']

fit = []

for i in range(len(groups_iter)):
    fit[i] = Holt(np.asarray(DAT_S[groups_iter[i]])).fit(smoothing_level = 0.3,smoothing_slope = 0.1)

Но я не могу автоматизировать его для всех столбцов, тоже использовал лямбда-функцию безуспешно. Метод HOLT следует применять отдельно к каждому столбцу. Я знаю, что в некоторых случаях прогноз может не иметь особого смысла, но этот риск предвиден и понят. Получение прогноза по всем столбцам и добавление данных - это все, что я намерен выполнить sh.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...