ประวัติความเป็นมาและหลักการทำงานของ Bitcoin
Bitcoin คืออะไร?
Bitcoin คือ สกุลเงินดิจิทัลที่ใช้แลกเปลี่ยนกันได้อย่างอิสระผ่านเครือข่ายที่เรียกว่า ‘บล็อกเชน’ ซึ่งทำงานแบบกระจายศูนย์ ไม่ต้องอาศัยคนกลางมาควบคุม แต่ผู้ใช้ทุกคนในเครือข่ายสามารถเข้าถึงและตรวจสอบทุกธุรกรรมที่เกิดขึ้นบนบล็อกเชนนั้นได้ถ้าพูดกันแบบง่ายๆ บิทคอยน์ก็เป็นเหมือนสกุลเงินที่สามารถใช้ซื้อ-ขายได้จริงผ่านอินเทอร์เน็ต เพียงแต่มันไม่มีรูปร่าง ไม่สามารถจับต้องได้ แต่เราสามารถรับรู้ทุกความเคลื่อนไหวในบิทคอยน์ของเราผ่านระบบบล็อกเชนที่มีความปลอดภัยสูง โดยจากสถิตินับตั้งแต่ที่มีบล็อกเชนเกิดขึ้นบนโลก ก็ไม่เคยพบการถูกแฮ็คหรือทำลายข้อมูลใดๆ แม้แต่ครั้งเดียว
ที่มาของบทความนี้:
https://www.bitkub.com/th/blog/what-is-bitcoin-8e94e8b61b5e
การทำนายราคา Bitcoin มีความสำคัญหลายประการในทั้งด้านธุรกิจและการลงทุน เนื่องจาก Bitcoin และสกุลเงินดิจิทัลอื่นๆ มีความผันผวนสูง การทำนายการเคลื่อนไหวของราคาสามารถช่วยให้นักลงทุนและผู้จัดการการลงทุนตัดสินใจได้ดีขึ้นในด้านต่างๆ
การวิเคราะห์ข้อมูลถดถอยพหุคูณเชิงเส้น (Multiple Linear Regression)
คืออะไรการวิเคราะห์ข้อมูลถดถอยพหุคูณเชิงเส้น คือการวิเคราะห์ข้อมูลเพื่อหาความสัมพันธ์ระหว่าง ตัวแปรต้นที่มีมากกว่า 1 ตัวแปร (แทนด้วย X1, X2, X3,…Xn) ที่มีต่อตัวแปรตาม (แทนด้วย y) ซึ่งมีการหาความสัมพันธ์เชิงเส้นระหว่างตัวแปรต้นและตัวแปรตาม การวิเคราะห์ถดถอยพหุคูณมีจุดประสงค์เพื่อต้องการทราบสมการถดถอยพหุคูณที่จะนำไปพัฒนาหรือตอบโจทย์ของการวิจัย
ที่มาของบทความนี้: https://www.datainvestigatorth.com/post/what-is-linear-regression-analysis-1
การใช้ LinearRegression ในการทำนายราคา Bitcoin
“การถดถอยเชิงเส้น”สมการเชิงเส้นที่ใช้ตัวแปรต้นเพื่อพยากรณ์ตัวแปรตาม
Feature
Open _0 : ราคาเปิดของวัน,
Std5_Open_0 : ส่วนเบี่ยงเบนมาตรฐานราคาเปิด5วันล่าสุด,
Rsi14_Open_0 : ค่าที่บอกการแกว่งของราคาเปิด 14 วันล่าสุด,
Atr14_0 : ค่าที่บอกความผันผวนราคา 14 วันล่าสุด
Target
High_0 : ราคาสูงสุดของวันนั้น
1. Import Libraries
import pandas as pd # ใช้สำหรับการจัดการข้อมูล
import numpy as np # ใช้สำหรับการคำนวณทางคณิตศาสตร์
import matplotlib.pyplot as plt # ใช้สำหรับการวาดกราฟ
import seaborn as sns # ใช้สำหรับการวาดกราฟที่ซับซ้อน
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score, mean_absolute_percentage_error # นำเข้าฟังก์ชันประเมินผลโมเดล
from sklearn.model_selection import train_test_split # ใช้สำหรับแบ่งข้อมูลฝึกและทดสอบ
from sklearn.linear_model import LinearRegression # ใช้สำหรับโมเดลถดถอยเชิงเส้น
from sklearn.preprocessing import OneHotEncoder, OrdinalEncoder # ใช้สำหรับแปลงข้อมูลประเภท
# ตั้งค่า seed ให้กับ numpy เพื่อความเสถียรในผลลัพธ์
np.random.seed(54213)
2. Read Data
data = pd.read_csv('btcusd_dataset.csv') # โหลดข้อมูลจากไฟล์ CSV
data # แสดงข้อมูล
data.drop(['Date', 'Low_0'], axis=1, inplace=True) # ลบคอลัมน์ 'Date' และ 'Low_0' ออกจาก DataFrame
data # แสดงข้อมูลหลังจากการลบคอลัมน์
3. Clean Data
data.info()
# no NaN
4. Split Dataset into Training & Test Sets
target_name = 'High_0' # ตั้งชื่อตัวแปรเป้าหมาย
feature_name = list(data.columns.drop(target_name)) # สร้างรายชื่อคุณลักษณะต่างๆ โดยไม่รวมเป้าหมาย
X = data[feature_name] # กำหนดข้อมูลคุณลักษณะ
y = data[target_name] # กำหนดข้อมูลเป้าหมาย
# แบ่งข้อมูลสำหรับการฝึกและทดสอบโดยไม่ผสม
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, shuffle=False)
5.AI Model Creation
reg = LinearRegression() # สร้างออบเจ็กต์โมเดลถดถอยเชิงเส้น
reg.fit(X_train, y_train) # ฝึกสอนโมเดลด้วยข้อมูลฝึก
reg.coef_ # แสดงค่าสัมประสิทธิ์ของโมเดล
reg.intercept_ # แสดงค่าจุดตัดแกนของโมเดล
7. Prediction
y_pred_train = reg.predict(X_train) # ทำนายผลโดยใช้ชุดข้อมูลฝึก
y_pred_test = reg.predict(X_test) # ทำนายผลโดยใช้ชุดข้อมูลทดสอบ
8. Model Evaluation
> Scoring
# แสดง R2 score สำหรับข้อมูลฝึก
print('r2_score =\t\t\t', r2_score(y_train, y_pred_train))
# แสดงค่า mean squared error สำหรับข้อมูลฝึก
print('mean_squared_error =\t\t', mean_squared_error(y_train, y_pred_train))
# แสดงค่า mean absolute error สำหรับข้อมูลฝึก
print('mean_absolute_error =\t\t', mean_absolute_error(y_train, y_pred_train))
# แสดงค่า mean absolute percentage error สำหรับข้อมูลฝึก
print('mean_absolute_percentage_error =', mean_absolute_percentage_error(y_train, y_pred_train))
> Scatter Plot between Predicted & Actual Values
# สร้างกราฟ scatter แสดงค่าทำนายและค่าจริง
plt.scatter(y_pred_train, y_train)
# เส้นสีแดงแสดงความสัมพันธ์ที่สมบูรณ์ระหว่างค่าทำนายและค่าจริง
plt.plot(y_pred_train, y_pred_train, color='red')
# ตั้งชื่อและป้ายกำกับแกนสำหรับกราฟ
plt.title('Scatter Plot between Predicted & Actual Values')
plt.xlabel('Predicted')
plt.ylabel('Actual')
> Test Set (Scoring)
# แสดงค่า R-squared ของโมเดลที่ทดสอบกับข้อมูล
print('r2_score =\t\t\t', r2_score(y_test, y_pred_test))
# แสดงค่า Mean Squared Error ของโมเดลที่ทดสอบกับข้อมูล
print('mean_squared_error =\t\t', mean_squared_error(y_test, y_pred_test))
# แสดงค่า Mean Absolute Error ของโมเดลที่ทดสอบกับข้อมูล
print('mean_absolute_error =\t\t', mean_absolute_error(y_test, y_pred_test))
# แสดงค่า Mean Absolute Percentage Error ของโมเดลที่ทดสอบกับข้อมูล
print('mean_absolute_percentage_error =', mean_absolute_percentage_error(y_test, y_pred_test))
> Scatter Plot between Predicted & Actual Values
plt.scatter(y_pred_test, y_test) # สร้างกราฟแบบจุดเพื่อแสดงค่าทำนายกับค่าจริง
plt.plot(y_pred_test, y_pred_test, color='red') # วาดเส้นแสดงความสัมพันธ์ที่สมบูรณ์ระหว่างค่าทำนายกับตัวเองเป็นเส้นอ้างอิง
plt.title('Scatter Plot between Predicted & Actual Values') # ตั้งชื่อกราฟ
plt.xlabel('Predicted') # ตั้งชื่อแกน X
plt.ylabel('Actual') # ตั้งชื่อแกน Y
9. Save Model
import pickle
pickle.dump((reg, feature_name), open('BitCoinmodel.pickle', 'wb')) # บันทึกโมเดลและชื่อคุณลักษณะลงในไฟล์
--สรุปผล--
*ในส่วน Training Set *
R-squared (r2_score): ค่า R-squared มีค่า 0.9969844924620879 หรือประมาณ 99.70% ซึ่งเป็นค่าที่สูงมาก แสดงว่าโมเดลมีความสามารถในการอธิบายความแปรปรวนของข้อมูลได้เกือบทั้งหมด โมเดลทำนายข้อมูลการฝึกได้เป็นอย่างดีมาก แต่ควรระวังปัญหา overfitting หรือการที่โมเดลทำนายข้อมูลที่ใช้ในการฝึกได้ดีเกินไปจนอาจไม่ทำนายข้อมูลใหม่ได้ดีเช่นกัน.
Mean Squared Error (MSE): ค่า MSE มีค่า 49108.90246100937 นี่คือเมตริกที่ใช้วัดความคลาดเคลื่อนของค่าที่ทำนายโดยโมเดลเมื่อเทียบกับค่าจริง ค่า MSE ที่ค่อนข้างสูงอาจชี้ว่าแม้โมเดลจะอธิบายข้อมูลได้ดี แต่ยังมีบางกรณีที่ความคลาดเคลื่อนของการทำนายค่อนข้างสูง.
Mean Absolute Error (MAE): ค่า MAE มีค่า 117.44078595680143 แสดงถึงค่าเฉลี่ยของความคลาดเคลื่อนแบบสัมบูรณ์ระหว่างการทำนายและค่าจริง ค่า MAE ที่ต่ำกว่า MSE ช่วยให้เข้าใจว่าข้อผิดพลาดส่วนใหญ่มีขนาดไม่ใหญ่มากนัก แต่ก็ยังมีบางกรณีที่มีข้อผิดพลาดที่ใหญ่พอสมควร.
Mean Absolute Percentage Error (MAPE): ค่า MAPE มีค่า 0.022897084081641823 หรือประมาณ 2.29% สะท้อนให้เห็นว่าโดยเฉลี่ยแล้ว ข้อผิดพลาดในการทำนายของโมเดลนี้มีขนาดเท่ากับ 2.29% ของค่าจริง ซึ่งถือว่าต่ำมากและเป็นผลลัพธ์ที่ดีมากในด้านการทำนายความแม่นยำ.
*ในส่วน Test Set *
R-squared: 99.62% ซึ่งสูงมากแสดงโมเดลอธิบายข้อมูลได้เกือบทั้งหมด, ชี้ให้เห็นไม่มี overfitting มาก.
Mean Squared Error (MSE): 1,028,992.63 สูงกว่าชุดฝึกมาก, บ่งชี้โมเดลอาจมีปัญหาในชุดทดสอบ.
Mean Absolute Error (MAE): 679.76 สูงขึ้นจากชุดฝึก, แสดงความคลาดเคลื่อนในการทำนายมากขึ้น.
Mean Absolute Percentage Error (MAPE): 1.83% ต่ำ, แสดงว่าความคลาดเคลื่อนในการทำนายเป็นสัดส่วนต่ำ.
สรุป: แม้ R-squared สูงแต่ MSE และ MAE ที่เพิ่มขึ้นในชุดทดสอบอาจบ่งบอกถึง overfitting หรือความไม่แม่นยำกับข้อมูลใหม่. ควรทบทวนและปรับปรุงโมเดลเพื่อความแม่นยำและความทนทานที่ดีขึ้น.
สรุป
จากการทดลองนี้ เราสามารถเห็นว่าโมเดลถดถอยเชิงเส้นมีความสามารถในการทำนายราคา Bitcoin ได้ในระดับหนึ่ง แต่ก็ต้องทำการตรวจสอบและประเมินโมเดลเพิ่มเติม เพื่อเพิ่มความแม่นยำและประสิทธิภาพในการทำนาย. การวิเคราะห์เชิงลึกเพิ่มเติมสามารถช่วยพัฒนาการทำนายหรือการเลือกคุณลักษณะที่เหมาะสมกว่าสำหรับการสร้างโมเดล.
ตัวอย่างการนำไป ทำนายค่า
Top comments (0)