• 保序回归与金融时序数据


    保序回归在回归问题中的作用是通过拟合一个单调递增或递减的函数,来保持数据点的相对顺序特性。

    一、保序回归的作用

    主要用于以下情况:

    1. 有序数据:当输入数据具有特定的顺序关系时,保序回归可以帮助保持这种顺序关系。例如,时间序列数据、评级数据或排序数据等。

    2. 无噪声数据:如果数据中存在噪声,即一些离群点或错误标记的数据点,保序回归可能会受到这些异常值的干扰。因此,保序回归更适用于相对干净且有序的数据。

    3. 数据平滑:保序回归可以用于平滑数据,消除数据中的波动和噪声,以获得更加稳定的趋势。

    4. 非线性关系:当数据中存在非线性的关系时,保序回归可以更好地捕捉这种非线性关系,而不受线性回归的限制。

    1. import pandas as pd
    2. import numpy as np
    3. import matplotlib.pyplot as plt
    4. from sklearn.isotonic import IsotonicRegression
    5. # 构造示例数据
    6. X = np.array([1, 2, 3, 4, 5]) # 自变量
    7. y = np.array([2, 3, 1, 5, 4]) # 因变量
    8. # 创建并训练保序回归模型
    9. model = IsotonicRegression()
    10. model.fit(X, y)
    11. # 预测新的数据点
    12. new_X = np.array([5, 6, 5.5])
    13. predicted_y = model.predict(new_X)
    14. # 输出预测结果
    15. print(predicted_y)

    二、保序回归处理金融股票时序数据并可视化

    1. data = {}
    2. data['close'] = pd.read_pickle('close.pkl')['stock_1'].iloc[-500:]
    3. data['open'] = pd.read_pickle('open.pkl')['stock_1'].iloc[-500:]
    4. n = len(data['close'])
    5. X = np.array(data['open'].values)
    6. y = data['close'].values
    7. from sklearn.isotonic import IsotonicRegression
    8. ir=IsotonicRegression()
    9. y_ir=ir.fit_transform(X,y)
    10. plt.figure(figsize=(15,6))
    11. plt.plot(X,y,'r.',markersize=12)
    12. plt.plot(X,y_ir,'g.-',markersize=12)
    13. plt.legend(('Data','Isotonic Fit'))
    14. plt.title("Isotonic Regression")
    15. plt.show()

    三、一个小例子

    1. 收集了股票价格和动量因子的历史数据,其中 stock_prices 是股票价格的时间序列数据,momentum_factors 是相应的动量因子数据,target 是标记股票涨跌的目标变量。

    2. 创建一个 IsotonicRegression 对象 model,并使用 fit 方法拟合模型,将动量因子作为自变量,目标变量作为因变量进行训练。

    3. 定义了新的动量因子 new_momentum_factors,并使用 predict 方法对其进行预测,得到相应的股票涨跌预测结果 predicted_target。

    1. # 收集股票价格和动量因子的历史数据
    2. stock_prices = np.array([100, 110, 120, 130, 120, 110, 100])
    3. momentum_factors = np.array([0.5, 0.7, 0.9, 1.2, 0.8, 0.6, 0.4])
    4. target = np.array([1, 1, 1, -1, -1, -1, -1]) # 标记股票涨跌,1为涨,-1为跌
    5. # 创建并拟合保序回归模型
    6. model = IsotonicRegression()
    7. model.fit(momentum_factors, target)
    8. # 预测新的动量因子对应的股票涨跌
    9. new_momentum_factors = np.array([0.5, 0.4, 0.7])
    10. predicted_target = model.predict(new_momentum_factors)
    11. # 输出预测结果
    12. print(predicted_target)
  • 相关阅读:
    springboot(ssm 旅游管理系统 旅游规划平台 Java(code&LW)
    小程序怎么做?个人小程序怎么做?新手教程
    [Linux] 数据链路层-----以太网帧协议、ARP协议
    FlexPro软件:生产、研究和开发中的测量数据分析
    求推荐几款http可视化调试工具?
    舒服,给Spring贡献一波源码。
    2023 收入最高的十大编程语言
    Python入门之函数调用
    LeetCode链表问题——142.环形链表II(一题一文学会链表)
    Linux教程 | 什么是Makefile?如何编写一个Makefile?
  • 原文地址:https://blog.csdn.net/qq_18668137/article/details/133890777