Сиборн: Как справиться с разрывом между историей c и прогнозными значениями? - PullRequest
2 голосов
/ 04 февраля 2020

У меня проблема с объяснением разрыва между историческими данными c и прогнозом. Синий - это история c. А оранжевый - это прогноз линейной регрессии с будущими значениями.

Dataframe df - это обучающий набор данных со столбцами year, pax, RealGDPLP. У фрейма данных FutureValCPs есть столбцы year и RealGDPLP.

Как вы объясните, что он не является непрерывным (в других случаях это так)? Результаты OLS прилагаются. Что-нибудь, что дает указание?

Спасибо.

enter image description here

enter image description here

1 Ответ

2 голосов
/ 04 февраля 2020

Без данных, без кода и подробностей о графическом движке, применяемом для создания вашего сюжета, будет трудно быть абсолютно уверенным. Но ваши прогнозы кажутся совершенно хорошими по сравнению с вашими историческими данными в том смысле, что они как минимум предсказывают плавный рост ваших значений в будущем. Если синяя линия представляет весь ваш набор данных, на самом деле с помощью OLS можно сказать немного больше.

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

Редактировать: на основе расширенного ответа на дополнительную информацию от OP:

Это должно напоминать вашу проблему в отношении сюжета:

enter image description here

Я при условии , что следующий кадр данных будет представлять вашу ситуацию:

            historic  forecast
dates                         
2020-01-01       1.0       NaN
2020-01-02       2.0       NaN
2020-01-03       3.0       NaN
2020-01-04       3.0       NaN
2020-01-05       6.0       NaN
2020-01-06       4.0       NaN
2020-01-07       8.0       NaN
2020-01-08       NaN       6.0
2020-01-09       NaN       7.0
2020-01-10       NaN       8.0
2020-01-11       NaN       9.0
2020-01-12       NaN      10.0
2020-01-13       NaN      11.0
2020-01-14       NaN      12.0

И я думаю, что это совершенно естественная ситуация для рядов для исторических c и прогнозных значений; нет никаких причин, почему между , а не должен быть визуальный разрыв. Теперь одним из способов визуального исправления этого может быть включение прогнозного значения 6.0 по индексу 2020-01-08 для серии historic, или исторического значения c 8 по индексу 2020-01-08 для прогнозов. Вы можете сделать это, используя df['forecast'].loc['2020-01-07']=8.0 или df['historic'].loc['2020-01-08']=6.0. Конечно, это можно сделать более плавно, программно определяя вставленное значение и индекс. Но вот результат в любом случае:

enter image description here

Полный код:

import seaborn as sns
import pandas as pd


sns.set_style("darkgrid")
plt.xticks(rotation=45)
#sns.set_xticklabels(rotation=45)
%matplotlib inline

df_historic = pd.DataFrame({'dates': pd.date_range("20200101", periods=7),
                            'historic': [1,2,3,3,6,4,8]}).set_index('dates')

df_forecast = pd.DataFrame({'dates': pd.date_range("20200108", periods=7),
                            'forecast': [6,7,8,9,10,11,12]}).set_index('dates')

df=pd.merge(df_historic, df_forecast, how='outer', left_index=True, right_index=True)

#df['forecast'].loc['2020-01-07']=8.0
df['historic'].loc['2020-01-08']=6.0

for column in df.columns:
    g=sns.lineplot(x=df.index, y=df[column])

g.set_xticklabels(labels=df.index, rotation=-20)

Надеюсь, это поможет !

...