首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何检测时间序列中的趋势是增加还是减少?

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

Stack Overflow用户
提问于 2019-04-12 18:13:24
回答 2查看 17.5K关注 0票数 11

我有几周的销售量数据

代码语言:javascript
运行
复制
xs[weeks] = [1,2,3,4]
ys['Units Sold'] = [1043,6582,5452,7571]

从给定的系列中,我们可以看到,虽然从xs2到xs3有下降的趋势,但总体趋势是增加的。如何在小的时间序列数据集中检测趋势。

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

EN

回答 2

Stack Overflow用户

发布于 2019-04-12 18:36:32

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

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

代码语言:javascript
运行
复制
numpy.polyfit(x, y, deg, rcond=None, full=False, w=None, cov=False) 

[Check this Official Documentation]

您可以像这样使用该函数

代码语言:javascript
运行
复制
def trenddetector(list_of_index, array_of_data, order=1):
    result = np.polyfit(list_of_index, list(array_of_data), order)
    slope = result[-2]
    return float(slope)

这个函数返回一个浮点值,表示数据的趋势,你也可以像这样分析它。

例如,

如果斜率为+ve值,则为

-->递增趋势

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

如果斜率为零值-->无趋势

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

解决方案的示例代码

代码语言:javascript
运行
复制
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

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

票数 23
EN

Stack Overflow用户

发布于 2019-04-12 18:40:09

一种方法可以是使用移动平均值(许多变化,你可能会看到EMA或SMA抛来抛去),它查看当前的时间步长和n个先前的步数,对这些进行平均,并将其用作一种“平滑”值。这将给你一个更好的指示数据实际移动的方式,因为一个小的减少不会对线的梯度产生显著的影响。

根据您的问题所在的领域,可能还值得查看金融部门中使用的一些统计数据,例如DMI (方向性移动指标)或MACD。

希望这能有所帮助

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55649356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档