因子數據的處理


  • 研究平台的api
    • get_price("000001.XSHE", start_date="2017-01-01", end_date="2017-01-06")
    • get_trading_dates(start_date="2017-01-01", end_date='2018-01-01')
    • fund = get_fundamentals(q, entry_date="2017-01-03")

  • 數據的組成

    • 面板數據:面板數據結構是為了存儲三維的結構,由截面數據和序列數據組成

    • 截面數據:在同一時間,不同統計單位相同統計指標組成的數據列

    • 換成截面數據 面板數據轉換 fund[:, '2017-01-03', :]  # 截面數據, DataFrame, 股票代號, 列指標名字
    • 序列數據:在不同時間點上收集到的數據這類數據反映了某一事物,現象等隨時間的變化狀態或程度  
  •  多因子數據處理
    • 多因子分析使用的是截面數據!!!
    • 因子數據的處理:
      • 因子去極值處理: 去極值並不是刪除“異常數據”,而是將這些數據“拉回”到正常的值
      • 分位數去極值
        • 1、中位數
          • 定義:中位數是指將數據按大小順序排列起來,形成一個數列,居於數列中間位置的那個數據。中位數用Me(Median簡寫)表示
        • 2、四分位數
        • 3、百分位數
          • 百分位數即數據所處位置為整體的某個%位數
          • 0 quantile = 0 percentile
          • 0.25 quantile = 25 percentile
          • 0.5 quantile = 50 percentile
        • 將指定分位數區間以為的極值用 分位點的值  替換掉
        • from scipy.stats.mstats import winsorize

          fund["pe_ration_winsorize"] = winsorize(fund['pe_ratio'], limits=0.025)

      • 中位數絕對偏差去極值
        • 經常使用:3倍中位數法
        • MAD 又稱為中位數絕對偏差法(Median Absolute Deviation), MAD 是一種先需計算所有因子與中位數之間的距離總和來檢測離群值的方法。
        • # 自實現中位數絕對偏差去極值
          def mad(factor):
              """
              實現中位數絕對偏差去極值
              """
              # 1、找到因子中的中位數 median
              me = np.median(factor)
              # 2、得到每個因子指與中位數的絕對偏差值  \x - median\
              # 3、得到絕對偏差值的中位數,MAD,median(\x - median\)
              # np.median(abs(factor - me)) 就是 MAD
              mad = np.median(abs(factor - me))
              
              # 求出3倍中位數的上下限制
              up = me + (3 * 1.4826 * mad)
              down = me - (3 * 1.4826 * mad)
              
              # 利用三倍中位數的值去極值
              factor = np.where(factor > up, up, factor)
              factor = np.where(factor < down, down, factor)
              return factor
              

           

      • 正態分布去極值
        • 采取的是3sigma原則
        • import numpy as np
          def threesigma(factor):
              """
              3sigma方法去極值
              """
              # 計算平均值和標准差
              mean = factor.mean()
              std = factor.std()
              # 計算上下限的數據
              up = mean + 3 * std
              down = mean - 3 * std
              
              # 替換極值
              factor = np.where(factor > up, up, factor)
              factor = np.where(factor < down, down, factor)
              
              return factor

           

      • 總結:
        • 采用中位數絕對偏差法去極值
      • 因子的標准化處理
        • from sklearn.preprocessing import StandardScaler
        • def stand(factor):
              """
              自實現標准化
              """
              mean = factor.mean()
              std = factor.std()
              
              return (factor - mean) /std

           


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM