จุดมุ่งหมายของงาน Quant คือพยายามทำความเข้าใจรูปแบบพฤติกรรมหรืแนวโน้มโน้มของข้อมูลเพื่อตัดสินใจในการลงทุนหรือแม้กระทั้งทำความเข้าใจข้อมูลก่อนนำข้อมูลไปสร้างแบบจำลอง หลายครั้งที่การทำความเข้าใจในส่วนนี้อาจต้องการการสร้างภาพเพื่อให้เราสามารถเข้าใจและสื่อสารการทีมของเราได้ การทำ data Visualize จึงมีความสำคัญมากๆ ในกระบวนการทำงานของ Quant ในบทความนี้เราจะมาดูกันว่าเราสามารถทำ Vizulization ด้วย Python กันอย่างไร
มาเริ่มกันเลย
เราเริ่มต้นด้วยกันดึงข้อมูลมาก่อนจาก yfinance เราจะดึง S&P Dow jone และ Vix index
import yfinance as yf
# Indices tickers
idx_tickers = ['^GSPC', '^DJI', '^VIX']
# Get data
idx_data = yf.download(idx_tickers, start="2000-01-01", end="2022-12-31")
เราจะแปลงข้อมูลเล็กน้อยโดยใช้ผลตอบแทน 20 วัน
df_pct_20 = idx_data["Adj Close"].pct_change(20).dropna()
df_pct_20["^VIX"] = idx_data["Adj Close"]["^VIX"]
df_pct_20
หลังจากนั้นเราจะเริ่มเข้าสู่การทำ Data Viz เริ่มแรกเราจะมาดูการกระจายของข้อมูลกันก่อน
df_pct_20.hist(bins=50, sharex=False, sharey=False, xlabelsize=1, ylabelsize=1, figsize=(12,12))
pyplot.show()
เราจะเห็นได้ว่าทั้ง DJI และ S&P มีการกระจายตัวของผลตอบแทนรายเดือนแบบปกติ ส่วน Vix มีการกระจายตัวแบบเบ้าขวา
df_pct_20.plot(kind='density', subplots=True, layout=(4,4), sharex=True, legend=True, fontsize=1, figsize=(15,15))
pyplot.show()
หรือเราจะสร้าง violinplot ก็ได้
# Grouped violinplot
sns.violinplot(x="^DJI", y="^VIX" , data=df_pct_20, palette="Pastel1")
plt.show()
ที่นี้เราจะมาดูความสัมพันธ์ของตัวแปรกันบ้างเริ่มแรกเราจะดูความสัมพันธ์ของ S&P และ Dow jone กันก่อน
df_pct_20.plot(kind="scatter", x="^DJI", y="^GSPC", alpha=0.3)
หรือเราสามารถดูความสัมพันธ์ทุกตัวแปรก็ได้
pyplot.figure(figsize=(15,15))
scatter_matrix(df_pct_20,figsize=(12,12))
pyplot.show()
หรือจะสร้างเป็น Correlation Matrix
correlation = df_pct_20.corr()
pyplot.figure(figsize=(15,15))
pyplot.title('Correlation Matrix')
sns.heatmap(correlation, vmax=1, square=True,annot=True,cmap='cubehelix')
กลับมาที่ความสัทพันธ์เราต้องการเข้าใจความสัมพันธ์มากขึ้นของ 3 ตัวแปรหากเราให้ สร้างกราฟ Scapter plot ระหว่าง S&P และ Down jond โดยให้ขนาดเท่ากับ Vix
# use the scatterplot function to build the bubble map
sns.scatterplot(data=df_pct_20, x="^GSPC", y="^DJI", size="^VIX", legend=False, sizes=(0.2, 200))
# show the graph
plt.show()
จากกราฟเราน่าจะเห็นความสัมพันธ์บ้างอย่างของของตัวแปรทั้งสาม โดยเราจะสังเกตุได้ว่าขนาดของจุดจะใหญ่กว่าปกติทั้ง 2 ด้านและมีขนาดเล็กเมื่ออยู่ตรงกลางเราลองเปลี่ยนขนาดเป็นสี
df_pct_20.plot(kind="scatter", x="^DJI", y="^GSPC", alpha=0.4,
s=df_pct_20["^VIX"] , label="^VIX", figsize=(10,7),
c="^VIX", cmap=plt.get_cmap("jet"), colorbar=True,
sharex=False)
plt.legend()
ก็จะเห็นความสัมพันธ์ที่ชัดเจนขึ้น
from statsmodels.tsa.seasonal import seasonal_decompose
result = seasonal_decompose(df_pct_20["^DJI"], model='additive', period=1)
result.plot()
pyplot.show()
ส่งท้าย
แม้ว่าการทำความเข้าใจข้อมูลจะดูเหมือนเป็นเรื่องง่าย แต่ในงาน Quant เรายังต้องพิจารณาเรื่องของแนวโน้ม ที่ใช้วิเคราะห์ ทั้งการแบ่งเป็น แนวโน้มของตลาด การนำเอาช่วงเวลาผิดปกติออก หรือ ในบ้างครั้งการดูด้วยรูปอาจจะไม่เข้าใจหรือเปรียบเทียบกันยาก กดติดตามไว้นะครับเราจะมาอธิบายเพิ่มเติมแน่นอน
https://colab.research.google.com/drive/1UOiwAym-_Gvzj7qQ7BGjE6mCB8cQdppb?usp=sharing
Comments