成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

將時間序列轉換為分類問題

人工智能
在本文中,我們將遵循 CRISP-DM 流程模型,以便我們采用結構化方法來解決業務案例。CRISP-DM 特別適用于潛在分析,通常在行業中用于構建數據科學項目。

本文將以股票交易作為示例。我們用 AI 模型預測股票第二天是漲還是跌。在此背景下,比較了分類算法 XGBoost、隨機森林和邏輯分類器。文章的另外一個重點是數據準備。我們必須如何轉換數據以便模型可以處理它。

在本文中,我們將遵循 CRISP-DM 流程模型,以便我們采用結構化方法來解決業務案例。CRISP-DM 特別適用于潛在分析,通常在行業中用于構建數據科學項目。

另外就是我們將使用 Python 包 openbb。這個包以包含了一些來自金融部門的數據源,我們可以方便的使用它。

首先就是安裝必須的庫:

pip install pandas numpy “openbb[all]” swifter scikit-learn

業務理解

首先應該了解我們要解決的問題, 在我們的例子中,可以將問題定義如下:

預測股票代碼 AAPL 的股價第二天會上漲還是下跌。

然后就是應該考慮手頭有什么樣的機器學習模型的問題。我們想預測第二天股票是上漲還是下跌。所以這是一個分類問題(1:股票第二天上漲或 0:股票第二天下跌)。在分類問題中,我們預測一個類別。在我們的例子中,是一個 0 類和 1 類的二元分類。

數據理解和準備

數據理解階段側重于識別、收集和分析數據集。第一步,我們下載 Apple 股票數據。以下是如何使用 openbb 執行此操作:

data = openbb.stocks.load(
    symbol = 'AAPL',
    start_date = '2023-01-01',
    end_date = '2023-04-01',
    monthly = False)
 data

該代碼下載 2023-01-01 和 2023-04-01 之間的數據。下載的數據包含以下信息:

  • Open:美元每日開盤價
  • High:當日最高價(美元)
  • Low:當日最低價(美元)
  • Close:美元每日收盤價
  • Adj Close:與股息或股票分割相關的調整后收盤價
  • Volume:交易的股票數量
  • Dividends:已付股息
  • Stock Splits:股票分割執行

我們已經下載了數據,但是數據還不適合建模分類模型。所以仍然需要為建模準備數據。所以需要編寫了一個函數來下載數據,然后對其進行轉換以進行建模。以下代碼顯示了此功能:

def get_training_data(symbol, start_date, end_date, monthly_bool=True, lookback=10):
     data = openbb.stocks.load(
         symbol = symbol,
         start_date = start_date,
         end_date = end_date,
         monthly = monthly_bool)
     data = get_label(data)
     data_up_down = data['up_down'].to_numpy()
     training_data = get_sequence_data(data_up_down, lookback)
     return training_data

這里面包含的第一個函數時get_label():

def encoding(n):
     if n > 0:
         return 1
     else:
         return 0
 def get_label(data):
     data['Delta'] = data['Close'] - data['Open']
     data['up_down'] = data['Delta'].swifter.apply(lambda d: encoding(d))
     return data

他的主要工作是:計算收盤價和開盤價之間的差值。然后我們用 1 標記股價上漲的所有日期,股價下跌的所有日期都標記為 0。另外的up_down列包含股票價格在特定日期是上漲還是下跌。這里使用 swifter.apply() 函數替代 pandas apply()是因為 swifter 提供多核支持。

第二個函數是get_sequence_data()。參數 lookback 指定預測中包含過去多少天。get_sequence_data()代碼如下 :

def get_sequence_data(data_up_down, lookback):
     shape = (data_up_down.shape[0] - lookback + 1, lookback)
     strides = data_up_down.strides + (data_up_down.strides[-1],)
     return np.lib.stride_tricks.as_strided(data_up_down, shape=shape, strides=strides)

這個函數有兩個參數:data_up_down 和 lookback。它返回一個新的 NumPy 數組,該數組表示具有指定窗口大小的 data_up_down 數組的滑動窗口視圖,該窗口大小由 lookback 參數確定。為了說明這個函數是如何工作的,我們看一個小例子。

get_sequence_data(np.array([1, 2, 3, 4, 5, 6]), 3)

結果如下:

array([[1, 2, 3],
      [2, 3, 4],
      [3, 4, 5],
      [4, 5, 6]])

在下文中,我們下載 Apple 股票的數據并對其進行轉換以進行建模。我們使用 10 天的回溯期。

data = get_training_data(symbol = 'AAPL', start_date = '2023-01-01', end_date = '2023-04-01', monthly_bool = False, lookback=10)
 pd.DataFrame(data).to_csv("data/data_aapl.csv")

數據已經準備完畢了,我們開始建模和評估模型。

建模

將數據讀入數據并生成測試和訓練數據。

data = pandas.read_csv("./data/data_aapl.csv")
 X=data.iloc[:,:-1]
 Y=data.iloc[:,-1]
 X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.33, random_state=4284, stratify=Y)

邏輯回歸:

該分類器是基于線性的模型,通常用作基線模型。我們使用scikit-learn的實現:

model_lr = LogisticRegression(random_state = 42)
 model_lr.fit(X_train,y_train)
 y_pred = model_lr.predict(X_test)

XGBoost:

XGBoost 是為速度和性能而設計的梯度提升決策樹的實現。它屬于樹提升算法,將許多弱樹分類器依次連接。

model_xgb = XGBClassifier(random_state = 42)
 model_xgb.fit(X_train, y_train)
 y_pred = model_xgb.predict(X_test)

隨機森林:

隨機森林構建多個決策樹。這種方法稱為集成學習,因為多個學習器是相互連接的,該算法屬于bagging方法。首字母縮寫詞“bagging”代表引導聚合。 這里也使用scikit-learn的實現:

model_rf = RandomForestClassifier(random_state = 42)
 model_rf.fit(X_train, y_train)
 y_pred = model_rf.predict(X_test)

評估

在對模型進行建模和訓練之后,我們需要檢查模型在測試數據上的性能。測量指標是 Recall、Precision 和 F1-Score。下表顯示了結果。

圖片

可以看到邏輯分類器(邏輯回歸)和隨機森林取得了明顯優于XGBoost模型的結果, 這是什么原因呢?這是因為數據比較簡單,只有幾個維度的特征,并且數據的長度也很小,我們所有的模型也沒有進行調優。

總結

我們這篇文章的主要目的是介紹如何將股票價格的時間序列轉換為分類問題,并且演示如何在數據處理時使用窗口函數將時間序列轉換為一個序列,至于模型并沒有太多的進行調優,所以對于效果評估來說越簡單的模型表現得就越好。

責任編輯:華軒 來源: DeepHub IMBA
相關推薦

2009-07-31 14:09:41

c#時間格式轉換

2023-08-25 14:47:56

TransFLACFLAC

2023-01-24 17:14:59

2021-09-04 17:26:31

SpringBoot轉換器參數

2009-07-15 16:56:59

Jython類型Java類型

2023-08-26 16:06:10

COBOLJava數據

2022-11-03 15:18:20

Python組件算法

2021-10-29 15:13:21

LinuxPDF文件

2019-07-30 10:51:45

Markdown格式化文檔Linux

2022-10-12 08:00:00

語音識別Node.js音頻質量

2014-05-04 12:51:21

Javascript編譯器

2024-02-19 15:38:08

JsonPython字符串

2017-05-25 15:14:36

2020-08-20 09:30:26

Python音頻文本格式

2020-12-17 08:08:15

CentOS

2024-09-09 18:17:25

PHP編程JSON格式

2011-07-11 10:42:23

SQL數據庫橫向數據縱向字段

2010-01-07 15:41:58

XML轉換為JSON

2023-10-16 09:26:48

CSS類型轉換

2009-07-29 10:24:52

HTM轉換為PDF
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩欧美国产一区二区三区 | 亚洲人成在线观看 | 亚洲成人自拍 | 一级黄色毛片 | 国产成人av电影 | 亚洲欧美成人影院 | 精品免费av | 欧美一级二级在线观看 | 91麻豆精品国产91久久久更新资源速度超快 | 日韩在线免费视频 | 国产小视频精品 | 国产精品一区二区三区99 | 欧美片网站免费 | 日韩一二区在线 | 久久91精品 | 欧美日韩在线视频一区二区 | 黄色在线播放视频 | 免费成人在线网站 | 久久成人一区 | 一区二区视频在线 | 亚洲一区中文字幕 | 久久午夜国产精品www忘忧草 | 亚洲国产精品久久久久婷婷老年 | 在线中文一区 | 激情国产在线 | 午夜影院网站 | 天天天天操 | 久草视| 国产精品久久久久久久久久久久午夜片 | 免费亚洲一区二区 | 91免费版在线观看 | 欧美日韩一区二区在线 | 伊人久久大香线 | 中文字幕在线视频免费观看 | 亚洲精品99 | 日韩av免费在线电影 | 国产视频线观看永久免费 | 亚洲日韩中文字幕一区 | 亚洲精品乱码久久久久久久久 | 欧美在线观看网站 | 欧美极品在线播放 |