# 專題主題
## 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測試)
* 最終預測結果

> 模型看起來容易低估指數,推測可能因為訓練資料時間與測試資料時間不同,我們直接將前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

> 2023/5/18-11/17(使用每小時K,能回溯的資料僅近半年),目前看來預測的模式是大部分吻合。
# 3.Line Bot

## Line Developer & API
* 如何架設、串接 -> 部屬一個大腦(服務)去跟 API 溝通
* 使用什麼套件 -> `linebot`
## GCP
* 環境建置 -> GCR & Docker
* 服務 -> Cloud Run

* 儲存空間 -> 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)->別組真的在用的 不要改內容!!!不要改內容!!!不要改內容!!
## 流程圖 - 功能分解圖
* 帛諺

## 系統環境圖
* 帛諺

## 圖0

說明範例 :
(一) 會員系統:
使用者發送 [註冊] 要求到 [會員系統],將新增的 [使用者註冊資料] 傳送到 [後台系統] 存入 [使用者資料表],再由 [會員系統] 將 [註冊結果] 顯示給使用者。
使用者發送 [登入] 要求到 [會員系統],將對應的 [使用者登入資料] 傳到 [後台系統] 進行比對驗證,再由 [會員系統] 將 [登入結果] 顯示給使用者。
(二) 最新消息:[後台系統] 將從網路上抓取到的 [新聞資訊] 回傳到 [最新消息],讓使用者能夠查看。
(三) 股市預測:使用者可以發送 [查看數據] 的要求到 [股市預測],其會回傳 [視覺化的數據呈現] 給使用者。
## 圖1

## 資料字典
* 帛諺 - 等博深圖0、1做完

## 資料庫設計-實體關係圖
* 帛諺

[關聯圖](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)

說明範例 :
1. [User 資料表] 儲存用戶信息,包括登入詳情及個人信息如電子郵件和密碼。
2. [PreferStock 資料表] 記錄用戶的偏好投資組合,可設置多個投資組合。
# 海報
## 學校要求
製作專題成果海報(專題報告書的精簡版,除了介紹技術方法外,可多用圖片、表格,強調實作成果)A1 尺寸,可到系辦詢問。