---
# System prepended metadata

title: 專題的講解順序

---

# 專題主題
## 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 尺寸，可到系辦詢問。