В общем ради интереса, получил модель как на графике в статье. Из тех данных что у вас есть.
1. Модель имеет тренировочный сет 130 плюс предполагает предсказание на 39 дней то есть конечное количество это 169. В коде же об этом не слова и он берет его до конца временной последовательности
2. Задана неправильная вариация параметра order. Что бы его задавать правильно требуется понимание.
3. По мелочи поправили остальное.
4. Самое главное, практическая ценность данной модели близка к нулю. Он предсказывает средние значения и как мы видим он "зацепил" ТРЕНД, кстати его параметром конечно же автор статьи тоже не указал, но я поправил.
В общем хотели рабочий код, который из данного датасета строит и визуализирует авторегрессивную модель то вот.
df = pd.read_csv("https://hands-on.cloud/wp-content/uploads/2022/02/catfish_sales_1986_2001.csv")
train = df.Total[:130]
test = df.Total[130:170]
model = ARIMA(train, order=(1, 0, 0),trend='ct').fit()
fc = model.get_forecast(39, alpha=0.05)
fc_series = pd.Series(fc.predicted_mean, index=test.index)
lower_series = pd.Series(fc.conf_int().iloc[:, 0], index=test.index)
upper_series = pd.Series(fc.conf_int().iloc[:, 1], index=test.index)
plt.figure(figsize=(12,5), dpi=100)
plt.plot(train, label='training')
plt.plot(test, label='actual')
plt.plot(fc_series, label='forecast')
plt.fill_between(lower_series.index, lower_series, upper_series, color='k', alpha=.15)
plt.title('Forecast vs Actuals')
plt.legend(loc='upper left', fontsize=8)
plt.show()