趋势检验方法(一)直线方程拟合

直线方程拟合

a基本原理:

  1. 设一条直线为y=kx+b,使用最小二乘法(least square method)来拟合出最优的k(斜率)。
  2. 设定一个阈值k0(k0>0),若|k|>k0则认为趋势有明显变化。当k>k0时,则认为 有上升的趋势;当k<-k0时,则认为有下降的趋势。
  3. |k|<=k0时可以视情况考虑是否要进行趋势稳定性检测。

b拟合函数原理:

假设需要拟合的函数为y=kx+b 

那么最小二乘法的本质是要使每一个点到y=kx+b的垂直距离平方和最小,从而算出k和b

具体实现步骤:

c方法优缺点:

优点:

该方法比较简单,易于理解解释。

缺点:

  1. 要求的趋势需要是线性的。
  2. 数据波动不能太大。

d算法入口:


e实例参考:
 

import numpy as np
from matplotlib import pyplot as plt

# 生成100个时序坐标点(x,sinx)
x = np.linspace(0, 5 / 9 * np.pi, 100)
y = np.sin(x)
y +=np.random.randn(100) * 0.05  # 加上噪声


def trendline(x, y, K):
    model = np.polyfit(x, y, deg=1)  # 拟合函数,输出参数
    print('斜率为', model[-2])
    if model[-2] > K:
        print('趋势上升')
    elif model[-2] < -K:
        print('趋势下降')
    else:
        print('趋势不明显')
    return np.poly1d(model)


# 作图,其中y1为原始数据,y2为拟合出来的数据
def PLT(x, y1, y2):
    plt.scatter(x, y1, color='blue')
    plt.plot(x, y2, color='red')
    plt.show()


if __name__ == '__main__':
    PLT(x, y, trendline(x, y, K=0.3)(x))  # 这里的K值自定

最后生成的结果如下

 

f参考文献:

知乎 线性回归之最小二乘法 https://zhuanlan.zhihu.com/p/90073632

知乎 时序数据常用趋势检测方法https://zhuanlan.zhihu.com/p/112703276

最小二乘法原理及在拟合函数实际应用https://www.cnblogs.com/mrtop/p/10242545.html

时间序列数据趋势分析 Cox-Stuart、Mann-Kendall、Dickey-Fuller

https://blog.csdn.net/qq_34356768/article/details/106559399

 

 

 

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值