# 專題主題 ## Linebot 股市預測機器人 功能 * 預測下次收盤時的大盤指數,如: 1. 盤中十點時,點擊預測按鈕,機器人回答 : 依據近期資料預測下次收盤為17421點。 2. 盤後,點擊預測按鈕,機器人回答 : 依據近期資料預測下次收盤為17356點。 * 利用技術指標篩選出符合條件的股票,如: 突破整理區間、爆量長紅、 突破季線、多頭吞噬..等。 * 宛如看盤軟體可以及時提供當下指數 # 1.資料蒐集 * 蒐集了什麼資料 * 費城半導體指數(與台股最相關) * 台股大盤每日開高低收 * 三大法人期貨未平倉(台指期) * 台積電ADR(每日開高低收) * 外匯的開高低收(美元/台幣、美元/日幣) * 怎麼蒐集 - 爬蟲以及看盤軟體輸出 * 爬蟲爬了什麼網站 * Google財經 - 費半 * Yahoo股市 - 台股大盤 * 台灣期貨交易所 - 三大法人期貨未平倉(台指期) * Stock.Q - 外匯 * 使用什麼套件爬蟲、怎麼爬蟲 * requests - 靜態爬蟲(網頁不會擋自動化爬蟲且沒有談出式視窗) * Yahoo、 台灣期貨交易所、Stock.Q * selenium - 動態爬蟲(模擬真人,如點擊後取得資料) * Histock、 Google財經 # 2.如何預測 使用LSTM及GRU ## 情境一(盤後預測) * 使用深度學習-LSTM * 為何使用LSTM * 怎麼使用LSTM * 資料如何輸入、輸出 將2007/01/11 ~ 2023/09/20蒐集到的資料做8/2分(8訓練、2測試) * 最終預測結果 ![image](https://hackmd.io/_uploads/S1_jSNkH6.png) > 模型看起來容易低估指數,推測可能因為訓練資料時間與測試資料時間不同,我們直接將前80%時間做為訓練資料,後20%為測試資料,導致標準化時,包含的時段太過遙遠,導致平均值及標準差差很多。 但標準化一定要執行,若不標準化可能會導致某些變化不明顯。等待後續功能完整再來優化模型。 * 一次訓練/一次預測所需時間 * 總訓練資料約3925筆、吃近二十天資料,訓練時間約為5分鐘。 * 訓練完後預測輸出時間約為2秒。 * 實際遇到的問題 * 訓練資料因為有刪掉部分缺失值(台灣&美國部分假期時間不同),導致有時時間並非連續 * 以前的指數只有現在的一半,在標準化時會害最小值到最大值的區間過大 ```python= # Create sequences for LSTM # 資料分割與重構 def create_sequences(data, seq_length): X, y = [], [] #F(x)=y for i in range(len(data) - seq_length): seq = data[i:i + seq_length] X.append(seq[:-1]) # 例如輸入過去九天資料,(第一筆~倒數第二筆) y.append(seq[-1][df.columns.get_loc("大盤_收盤價")]) # 第十天的答案 return np.array(X), np.array(y) ``` ```python= # Model Creation model = tf.keras.Sequential() model.add(tf.keras.layers.LSTM(50, return_sequences=True, input_shape=(X_train.shape[1], X_train.shape[2]))) model.add(tf.keras.layers.LSTM(50)) # 使用兩層LSTM,神經元各為50。 model.add(tf.keras.layers.Dense(1)) model.compile(optimizer='adam', loss='mse') # 最適化演算法 ``` ## 情境二(盤中預測) * 使用深度學習-GRU * 為何使用GRU * 因為輸入的資料格式與維度不太適合使用LSTM ```python= { "date", "future_9", "future_10", "future_2", "index_9", "index_10", "index_2" } ``` * V.S LSTM 資料格式只看當下及收盤,沒有時間序列的一致格式。 ```python= # 看前三天資料 "GRU": {"前天收盤", "昨天收盤", "今日開盤"} (1筆資料) "LSTM": {"開盤", "收盤"}*3 (前天+昨天+今天 = 3筆資料) ``` * 資料維度較小,適合較不複雜的 GRU ![image](https://hackmd.io/_uploads/Hk7zAr1Sp.png) > 2023/5/18-11/17(使用每小時K,能回溯的資料僅近半年),目前看來預測的模式是大部分吻合。 # 3.Line Bot ![image](https://hackmd.io/_uploads/r1dFb2eBp.png) ## Line Developer & API * 如何架設、串接 -> 部屬一個大腦(服務)去跟 API 溝通 * 使用什麼套件 -> `linebot` ## GCP * 環境建置 -> GCR & Docker * 服務 -> Cloud Run ![image](https://hackmd.io/_uploads/BkrM3S1r6.png) * 儲存空間 -> GCS (因為 CloudSQL 很貴就不用資料庫) # 影片要求(學校) 約 8-10 分鐘影片。 影片內容包括: (1) 專題題目、動機背景、解決問題、實作流程、技術方法、成果展示、貢獻 Highlight。 (2) 最後一頁工作人力分配。 (3) 建議可上字幕、影片動畫後製、儘量別僅只於投影片報告(option)。 (4) 可自由創意發揮,影片呈現方式不拘。 # 影片呈現 呈現順序 [影片用Canva](https://www.canva.com/design/DAF2lqykcGI/cZFUGiymKraadBpXQW1mqw/edit) - [x] 片頭-[範例影片1 1-3Min](https://www.youtube.com/watch?v=bPptTi9uR-0&t=2s)(30S) - [x] 拍攝微影片(約180s) * Demo-[範例影片2 從7:30](https://www.youtube.com/watch?v=Enhs_0tLL_0) (180S) * 動機(文字同[上學期](https://www.youtube.com/watch?v=YXSd4UnRDrQ&t=384s)即可,但畫面修改)(30S) * 為什麼要使用Line呢?(同上學期)(30S) * 機器人實際運作流程(120S) * 貢獻 Highlight。 ## 動機文稿 自從OpenAI 發表了 ChatGPT後,AI族群備受矚目且被視為未來的重要趨勢。 當然這其中就穎起了股市中巨幅的變動,彷彿下一個時代就要來臨! 他的出現更是讓Nvidia,創下單日漲幅30%,盤中市值漲了2000億美元,如此誇張的數值,幾乎是逼近兩個intel的市值,也是創下美股市值漲幅最高的一天。 而有台灣護國神山之稱的台積電,正好是Nvidia的第二大客戶,也使台積電營收暴風成長,股價年成長來到近30%的點位。 因此引起了我們對AI以及股市的熱情! 然而,我們認為目前市場上的股票看盤軟體對於新手使用者來說不夠友善,對於這種畫面再多看五秒,你是否也頭昏眼花了呢? 所以選擇合適的看盤軟體至關重要,因為這會直接影響新手們對市場的理解和投資決策,然而這些現有的看盤軟體是無法帶給他們非常良好的使用體驗的,譬如:過多的資訊可能讓新手感到混亂,難以理解哪些指標和數據是重要的。這些種種原因會導致新手投資失利,自然就沒有良好的使用體驗進而退出市場。 因此,我們計劃將大盤預測與聊天機器人結合,使用簡潔的按鍵提供新手投資人更快速獲取股票資訊的方式,也可以直接使用自然語言進行初步的股票篩選以及未來趨勢的掌握,將複雜的事情簡單化!並且架設在Line上,就無需再另外下載軟體,來達到使用者體驗最佳化! ## 機器人實際運作流程 直接照著Canva用AI念出 # 報告書需用圖 [參照禹丞](https://docs.google.com/document/d/1uI1M0kFfiancipfpOewC2EZBeett6KmV/edit)->別組真的在用的 不要改內容!!!不要改內容!!!不要改內容!! ## 流程圖 - 功能分解圖 * 帛諺 ![image](https://hackmd.io/_uploads/rkbGLZzU6.png) ## 系統環境圖 * 帛諺 ![image](https://hackmd.io/_uploads/HyTsvbzUT.png) ## 圖0 ![圖0完整.drawio](https://hackmd.io/_uploads/HJWhODKIa.png) 說明範例 : (一) 會員系統: 使用者發送 [註冊] 要求到 [會員系統],將新增的 [使用者註冊資料] 傳送到 [後台系統] 存入 [使用者資料表],再由 [會員系統] 將 [註冊結果] 顯示給使用者。 使用者發送 [登入] 要求到 [會員系統],將對應的 [使用者登入資料] 傳到 [後台系統] 進行比對驗證,再由 [會員系統] 將 [登入結果] 顯示給使用者。 (二) 最新消息:[後台系統] 將從網路上抓取到的 [新聞資訊] 回傳到 [最新消息],讓使用者能夠查看。 (三) 股市預測:使用者可以發送 [查看數據] 的要求到 [股市預測],其會回傳 [視覺化的數據呈現] 給使用者。 ## 圖1 ![image](https://hackmd.io/_uploads/ByFBuZfU6.png) ## 資料字典 * 帛諺 - 等博深圖0、1做完 ![image](https://hackmd.io/_uploads/rkjuuZMLa.png) ## 資料庫設計-實體關係圖 * 帛諺 ![image](https://hackmd.io/_uploads/rJ18FWzIp.png) [關聯圖](https://console.cloud.google.com/storage/browser/stockmarketindexai-sql/data?hl=zh-tw&project=stockmarketindexai&pageState=(%22StorageObjectListTable%22:(%22f%22:%22%255B%255D%22))&prefix=&forceOnObjectsSortingFiltering=false) 選擇CSV並用[設計網站](https://app.creately.com/d/bDj0ji87fSZ/edit) ![image](https://hackmd.io/_uploads/B1GVqZGI6.png) 說明範例 : 1. [User 資料表] 儲存用戶信息,包括登入詳情及個人信息如電子郵件和密碼。 2. [PreferStock 資料表] 記錄用戶的偏好投資組合,可設置多個投資組合。 # 海報 ## 學校要求 製作專題成果海報(專題報告書的精簡版,除了介紹技術方法外,可多用圖片、表格,強調實作成果)A1 尺寸,可到系辦詢問。