首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >时间序列/信号处理中的趋势自动检测

时间序列/信号处理中的趋势自动检测
EN

Stack Overflow用户
提问于 2017-10-03 18:58:44
回答 1查看 3.9K关注 0票数 6

对于时间序列数据,自动检测趋势或绘制趋势线(上升趋势、下降趋势、无趋势)的好算法是什么?如果你能向我介绍任何好的研究论文或在python,R或Matlab的好图书馆,非常感谢。

理想情况下,该算法的输出将有4列:

  1. from_time
  2. to_time
  3. 趋势(向上/向下/无趋势/未知)
  4. probability_of_trend或degree_of_trend

非常感谢你抽出时间。

EN

回答 1

Stack Overflow用户

发布于 2022-09-09 16:19:02

我也有一个类似的问题--想要对具有相似趋势的片段进行时间序列分割。对于该任务,您可以使用趋势分类器 Python库。它是pip (pip3 install trend-classifier)。

下面是一个从YahooFinance获取时间序列数据并执行分析的示例。

代码语言:javascript
复制
import yfinance as yf
from trend_classifier import Segmenter

# download data from yahoo finance
df = yf.download("AAPL", start="2018-09-15", end="2022-09-05", interval="1d", progress=False)

x_in = list(range(0, len(df.index.tolist()), 1))
y_in = df["Adj Close"].tolist()

seg = Segmenter(x_in, y_in, n=20)
seg.calculate_segments()

现在,您可以用以下方法绘制带有趋势线和分段边界的时间序列:

代码语言:javascript
复制
seg.plot_segments()

您可以查看每一段的详细信息(例如,斜率正值表示上升趋势和负下降趋势)。查看有关带有索引3的段的信息

代码语言:javascript
复制
from devtools import debug
debug(seg.segments[3])

您可以使用生成Pandas DataFrame的Segmenter.segments.to_dataframe()方法以表格形式获得有关所有段的信息。

代码语言:javascript
复制
seg.segments.to_dataframe()

有一个控制“泛化”因子的参数,即您可以尝试将趋势线拟合到较小的时间序列范围--您将得到大量的分段,或者您可以选择跨越时间序列中较大部分的分段(更一般的趋势线),最后得到一个划分为较少段的时间序列。若要控制该行为,请在初始化Segmenter()时(例如,Segmenter(x_in, y_in, n=20)n参数使用各种值)。n越大,泛化能力越强(分段越少)。

免责声明:我是趋势分类包的作者。

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

https://stackoverflow.com/questions/46551583

复制
相关文章

相似问题

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