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

发布于 2022-09-09 16:19:02
我也有一个类似的问题--想要对具有相似趋势的片段进行时间序列分割。对于该任务,您可以使用趋势分类器 Python库。它是pip (pip3 install trend-classifier)。
下面是一个从YahooFinance获取时间序列数据并执行分析的示例。
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()现在,您可以用以下方法绘制带有趋势线和分段边界的时间序列:
seg.plot_segments()

您可以查看每一段的详细信息(例如,斜率正值表示上升趋势和负下降趋势)。查看有关带有索引3的段的信息
from devtools import debug
debug(seg.segments[3])您可以使用生成Pandas DataFrame的Segmenter.segments.to_dataframe()方法以表格形式获得有关所有段的信息。
seg.segments.to_dataframe()有一个控制“泛化”因子的参数,即您可以尝试将趋势线拟合到较小的时间序列范围--您将得到大量的分段,或者您可以选择跨越时间序列中较大部分的分段(更一般的趋势线),最后得到一个划分为较少段的时间序列。若要控制该行为,请在初始化Segmenter()时(例如,Segmenter(x_in, y_in, n=20)为n参数使用各种值)。n越大,泛化能力越强(分段越少)。
免责声明:我是趋势分类包的作者。
https://stackoverflow.com/questions/46551583
复制相似问题