如何检测趋势在时间序列中是增加还是减少?

时间:2019-04-12 10:13:24

标签: python time-series trend

我有几周的数据,给出了售出的单位 xs [weeks] = [1,2,3,4] ys ['已售出的商品'] = [1043,6582,5452,7571]

从给定的序列中,我们可以看到,尽管从xs [2]到xs [3]有所下降,但总体趋势是不断增加的。如何在小型时间序列数据集中检测趋势。

找到直线的斜率是最好的方法吗?以及如何在python中计算直线的倾斜角度?

2 个答案:

答案 0 :(得分:3)

我经历了你今天面临的同样问题。为了检测趋势,我找不到处理这种情况的特定功能。

我发现了一个非常有用的功能,即 numpy.polyfit()

numpy.polyfit(x, y, deg, rcond=None, full=False, w=None, cov=False) 

[Check this Official Documentation]

您可以使用这样的功能

def trenddetector(list_of_index,array_of_data, order=1):
    result = np.polyfit(list_of_index, list(data), order)
    slope = result[-2]
    return float(slope)

此函数返回一个浮点值,该值指示数据的趋势,并且您也可以通过类似这样的方式对其进行布局

例如,

  

如果斜率是+ ve值->上升趋势

     

如果斜率是-ve值->下降趋势

     

如果斜率是零值->没有趋势

使用此功能,并根据您的问题找出正确的阈值并将其作为条件。

您的解决方案的示例代码

import numpy as np
def trendline(index,data, order=1):
    coeffs = np.polyfit(index, list(data), order)
    slope = coeffs[-2]
    return float(slope)

index=[1,2,3,4]
List=[1043,6582,5452,7571]
resultent=trendline(index,List)
print(resultent)  

结果

  

1845.3999999999999

根据此输出,结果远大于零,因此它表明您的数据正在稳定增长。

答案 1 :(得分:0)

一种方法可能是使用移动平均线(很多变化,您可能会看到EMA或SMA抛出),它会查看当前时间步长和n个先前的步长,将其平均后将其用作某种“平滑”的价值。这将为您更好地指示数据的实际移动方式,因为小幅下降不会对直线的坡度产生重大影响。

根据问题所在的领域,可能还需要检查一下金融部门使用的一些统计信息,例如DMI(方向变动指标)或MACD。

希望这会有所帮助