การสร้างฟีเจอร์จากข้อมูลปริมาณการซื้อขาย
เราจะใช้โมเดลแบบ non-linear เพื่อให้การทำนายแม่นยำยิ่งขึ้น โมเดลเชิงเส้น (linear model) กำหนดให้ฟีเจอร์มีความสัมพันธ์เชิงเส้นกับ target เท่านั้น แต่โมเดล machine learning ประเภทอื่นสามารถนำฟีเจอร์มารวมกันในรูปแบบ non-linear ได้ ตัวอย่างเช่น ราคาอาจปรับตัวขึ้นเมื่อค่าเฉลี่ยเคลื่อนที่ของราคามีแนวโน้มขึ้น ขณะที่ค่าเฉลี่ยเคลื่อนที่ของปริมาณการซื้อขายมีแนวโน้มลง วิธีเดียวที่จะจับปฏิสัมพันธ์เหล่านี้ได้คือการคูณฟีเจอร์เข้าด้วยกัน หรือใช้อัลกอริทึม machine learning ที่รองรับความสัมพันธ์แบบ non-linear (เช่น random forests)
เพื่อเพิ่มข้อมูลที่อาจมีปฏิสัมพันธ์กับฟีเจอร์อื่น เราสามารถเพิ่มฟีเจอร์ที่มีความสัมพันธ์ต่ำเข้าไปได้ โดยเริ่มจากข้อมูลปริมาณการซื้อขาย (volume) ซึ่งอยู่ใน lng_df ในคอลัมน์ Adj_Volume
ก่อนเริ่มต้น ให้จำไว้ว่าฟังก์ชันของ TA-Lib (เช่น SMA()) ต้องรับ Numpy array เท่านั้น ไม่ใช่ pandas object สามารถใช้ attribute .values ของ pandas Series หรือ DataFrame เพื่อแปลงเป็น Numpy array ได้
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Machine Learning สำหรับการเงินด้วย Python
คำแนะนำการฝึกหัด
- สร้างค่าเปอร์เซ็นต์การเปลี่ยนแปลงของปริมาณการซื้อขายแบบ 1 วัน (ใช้
pct_change()จาก pandas) แล้วกำหนดค่าไปยังคอลัมน์Adj_Volume_1d_changeในlng_df - สร้างค่าเฉลี่ยเคลื่อนที่ 5 วันของเปอร์เซ็นต์การเปลี่ยนแปลงรายวันของปริมาณการซื้อขาย แล้วกำหนดค่าไปยังคอลัมน์
Adj_Volume_1d_change_SMAในlng_df - พล็อต histogram ของฟีเจอร์ใหม่ทั้งสองที่สร้างขึ้น โดยใช้ลิสต์
new_features
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Create 2 new volume features, 1-day % change and 5-day SMA of the % change
new_features = ['Adj_Volume_1d_change', 'Adj_Volume_1d_change_SMA']
feature_names.extend(new_features)
lng_df[____] = lng_df['Adj_Volume'].____
lng_df[____] = talib.SMA(____[____].____,
timeperiod=____)
# Plot histogram of volume % change data
lng_df[____].plot(kind='hist', sharex=False, bins=50)
plt.show()