Как я могу исправить следующие ошибки в моей модели ARIMA? - PullRequest
0 голосов
/ 19 апреля 2020

Я построил модель ARIMA для прогнозирования для своих данных временных рядов. нажмите эту ссылку для доступа к файлу данных.

В моем коде получено несколько ошибок.

code:

import pandas as pd
import seaborn as sb
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline

data = pd .read_csv('datasets/car_sales.csv')
print(data.head())

data['Month']= pd.to_datetime(data['Month'], infer_datetime_format = True)
indexed_data = data.set_index(['Month'])
print(indexed_data.head())

fig, ax = plt.subplots(figsize = (8,6))
sb.lineplot(data = indexed_data, ax = ax)
plt.show()

#define a function to check stationarity of the data (rolling stats and Dickey-fuller tst)
def test_stationary(timeseries):
    #Determing rolling statistics
    moving_avg = timeseries.rolling(window=12).mean()
    moving_std = timeseries.rolling(window=12).std()

    #Plot rolling statistics:
    fig, ax = plt.subplots(figsize = (10,4))
    sb.lineplot(data = timeseries, legend = False, label = 'Original')
    sb.lineplot(data = moving_avg, palette = ['red'], legend = False, label = 'Rollmean')
    sb.lineplot(data = moving_std, palette = ['black'], legend = False, label = 'Rollstd')
    plt.title('Rolling statistics to check stationarity')
    plt.legend(loc='best')
    plt.show()

    #Perform Dickey-Fuller test:
    from statsmodels.tsa.stattools import adfuller

    print('Results of Dickey-Fuller Test:')
    dftest = adfuller(timeseries, autolag='AIC')
    dfoutput = pd.Series(dftest[0:4], index=['Test Statistic','p-value','#Lags Used','Number of Observations Used'])
    for key,value in dftest[4].items():
        dfoutput['Critical Value (%s)'%key] = value
    print(dfoutput)

test_stationary(indexed_data)

# data is non stationary, Therefore we have to make it stationary
# apply differencing technique to make the data stationary 

data_log = np.log(indexed_data)
data_log_diff = data_log - data_log.shift()
data_log_diff.dropna(inplace = True)

test_stationary(data_log_diff)

# we observe the data is stationary and can be used for prediction
# prediction is done using ARIMA

# let us plot ACF and PACF to determine p and q parameters for ARIMA model

from statsmodels.tsa.stattools import acf, pacf
lag_acf = acf(data_log_diff, nlags=20, fft=True)
lag_pacf = pacf(data_log_diff, nlags=20, method='ols')

#Plot ACF: 
fig, ax = plt.subplots(figsize = (10,6))
sb.lineplot(data = lag_acf, ax = ax)
ax.set_xticks(range(1,len(lag_acf)))#Plot PACF: 
fig, ax = plt.subplots(figsize = (10,6))
sb.lineplot(data = lag_pacf, ax = ax)
ax.set_xticks(range(1,len(lag_pacf)))
plt.axhline(y=0,linestyle='--',color='gray')
plt.axhline(y=-1.96/np.sqrt(len(data_log_diff)),linestyle='--',color='gray')
plt.axhline(y=1.96/np.sqrt(len(data_log_diff)),linestyle='--',color='gray')
plt.title('Partial Autocorrelation Function')
plt.show()

#Plot PACF: 
fig, ax = plt.subplots(figsize = (10,6))
sb.lineplot(data = lag_pacf, ax = ax)
ax.set_xticks(range(1,len(lag_pacf)))
plt.axhline(y=0,linestyle='--',color='gray')
plt.axhline(y=-1.96/np.sqrt(len(data_log_diff)),linestyle='--',color='gray')
plt.axhline(y=1.96/np.sqrt(len(data_log_diff)),linestyle='--',color='gray')
plt.title('Partial Autocorrelation Function')
plt.show()

# based on acf and pacf plots the ARMA parameter can be p = 1, q = 1

#ARIMA model for data
from statsmodels.tsa.arima_model import ARIMA
model = ARIMA(data_log, order=(1, 1, 0))  
results_ARIMA = model.fit(disp = -1)  
plt.plot(data_log_diff)
plt.plot(results_ARIMA.fittedvalues, color='red')
plt.title('RSS: %.4f'% sum((results_ARIMA.fittedvalues-data_log_diff)**2))

при запуске Приведенный выше код Я сталкиваюсь со следующими ошибками:

  1. На основе графиков acf и pacf параметры p и q найдены равными p = 1 и q = 1. Но моя модель аримы не работает.

    (Я получаю ValueError: вычисленные начальные коэффициенты MA не обратимы. Вы должны вызвать обратимость, выбрать другой порядок модели или вы можете передать свои собственные start_params. ) для p = 1, q = 1. Вместо этого это работает для p = 1, q = 0.

    В чем проблема при значениях параметров p = 1, q = 1?

  2. Я получаю предупреждение:

    C: \ ProgramData \ Anaconda3 \ lib \ site-packages \ statsmodels \ tsa \ base \ tsa_model.py: 162: ValueWarning: Информация о частоте не предоставлена, поэтому будет использоваться предполагаемая частота MS. % freq, ValueWarning) C: \ ProgramData \ Anaconda3 \ lib \ site-packages \ statsmodels \ tsa \ base \ tsa_model.py: 162: ValueWarning: Информация о частоте не предоставлена, поэтому будет использоваться предполагаемая частота MS. % freq, ValueWarning)

    В чем причина этого предупреждения и как его исправить?

  3. Я получаю ошибку для параметров p = 1 q = 0 Ошибка находится в строке для вывода значения RSS

    TypeError Traceback (последний последний вызов)

    ----> 6 plt.title ('RSS:% .4f' % sum ((results_ARIMA.fteedvalues-data_log_diff) ** 2))

    TypeError: Сложение / вычитание целых и целочисленных массивов с меткой времени больше не поддерживается. Вместо добавления / вычитания n используйте `n * obj.freq

    Как исправить эту ошибку?

1 Ответ

0 голосов
/ 21 апреля 2020

В модели ARIMA в statsmodel порядок параметров равен (p, d, q) . Ваш порядок параметров неправильный. Правильный порядок (1,0,1).

model = ARIMA(data_log, order=(1, 0, 1))
...