Python Seaborn:如何处理历史值和预测值之间的差距?

Python Seaborn:如何处理历史值和预测值之间的差距?,python,regression,seaborn,Python,Regression,Seaborn,我无法解释历史数据和预测之间的差距。 蓝色是历史性的。橙色是具有未来值的林林回归预测 Dataframe df是列为year、pax、RealGDPLP的培训数据集。 Dataframe FutureValCPs有year和RealGDPLP列 你如何解释它不是连续的(在其他情况下是连续的)? OLS结果见附件。有什么迹象吗 多谢各位 由于没有数据、代码和用于生成绘图的图形引擎的详细信息,因此很难绝对确定。但与历史数据相比,你的预测似乎非常好,因为它至少预测了你未来价值的平稳增长。如果蓝线代表

我无法解释历史数据和预测之间的差距。 蓝色是历史性的。橙色是具有未来值的林林回归预测

Dataframe df是列为year、pax、RealGDPLP的培训数据集。 Dataframe FutureValCPs有year和RealGDPLP列

你如何解释它不是连续的(在其他情况下是连续的)? OLS结果见附件。有什么迹象吗

多谢各位


由于没有数据、代码和用于生成绘图的图形引擎的详细信息,因此很难绝对确定。但与历史数据相比,你的预测似乎非常好,因为它至少预测了你未来价值的平稳增长。如果蓝线代表整个数据集,那么使用OLS就真的没什么可说的了

曲线图中存在间隙的原因是,曲线图中的两条线是两条不同的线,在历史值和预测值之间的转换中不共享一个共同的时间戳。有很多方法可以在视觉上弥补这一点,但正如我所提到的,我不知道您是如何估计模型或生成此图的

编辑:基于OP的更多信息的扩展答案:

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)
这应该类似于您在绘图方面的问题:

我假设以下数据框将代表您的情况:

            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
我认为这对于历史和预测值的系列来说是一个非常自然的情况;没有理由认为它们之间不存在视觉上的差距。现在,一种视觉补救方法是将
2020-01-08
指数处的
6.0
预测值纳入
历史
系列,或
2020-01-08
指数处的历史值8纳入预测。您可以使用
df['forecast'].loc['2020-01-07']=8.0
df['historic'].loc['2020-01-08']=6.0
。当然,通过编程方式确定插入值和索引可以更顺利地完成这项工作。但不管怎样,结果都是这样的:

完整代码:

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)

我希望这有帮助

谢谢你,维斯特兰。我添加了一些我可以发布的信息。这有用吗?我如何纠正这种形象化?我手工计算,数值为真。@ShuFFle2207我明天再看。@ShuFFle2207您在这里使用matplotlib吗?也许是阴谋?我只是天生的阴谋家。matplib inline也在使用。@ShuFFle2207啊,是的,我现在看到了你代码的
sns
部分。我来看看。