การวัด การเบี่ยงเบนของผลตอบแทนด้วย Python
การทำ portfolio optimization ด้วย google colab IV
วันนี้เราจะพูดถึงการเบ้ของผลตอบแทน ภายใต้การแจกแจงแบบปกติผลตอบแทนรายวันหรือรายเดือนจะเป็นไปได้น้อยมากทีมีการเปลี่ยนแปลงอย่างมาก แต่หากเราพิจารณาถึงผลตอบแทนที่เกิดขึ้นจริงจะพบว่ามีโอกาศค่อนข้างมากที่มีผลตอบแทนแบบผิดปกติ
ดังนั้นเราควรพิจารณาความเบ้(Skewness) และความโด่ง(kurtosis) ของผลตอบแทนเป็นตัวชี้วัดความกระจายของผลตอบแทน
ความเบ้ Skewness
ความเบ้บอกถึงการเบี่ยงเบนของข้อมูล
ความเบ้ = 0: การกระจายแบบปกติ
ความเบ้> 0:เบ้ซ้าย มีความถี่ของข้อมูลมากขึ้นในทางซ้ายของการแจกแจง
ความเบ้ <0: เบ้ขวามีความถี่ของข้อมูลมากขึ้นในทางขวาของการกระจาย
แต่ในการลงทุนแล้ว สินทรัพย์ที่มีความเบ้น้อยกว่า 0 จะมีความน่าสนใจในการลงทุนมากกว่าสินทรัพย์ที่มีค่าความเบ้มากกว่าศูนย์เพราะว่าโอกาศที่การลงทุนไปเป็นด้านลบน้อยกว่าไปเป็นด้านบวกนั้นเอง
ความโด้ง kurtosis
kurtosis เป็นตัวชี้วัดทางสถิติที่ใช้อธิบายการกระจายตัว ในขณะที่ความเบ้แตกต่างค่ามากในหนึ่งกับหางอื่น ๆ Kurtosis วัดค่ามากในหางทั้งสอง การแจกแจงด้วย kurtosis ขนาดใหญ่จะแสดงข้อมูลหางมากกว่าส่วนท้ายของการแจกแจงแบบปกติ (เช่นส่วนเบี่ยงเบนมาตรฐานห้าค่าหรือมากกว่าจากค่าเฉลี่ย) การแจกแจงที่มีเคิร์ตซีต่ำแสดงข้อมูลหางที่โดยทั่วไปแล้วจะรุนแรงน้อยกว่าหางของการแจกแจงแบบปกติ
สำหรับนักลงทุนการกระจายผลตอบแทนที่สูงหมายถึงว่านักลงทุนจะได้รับผลตอบแทนที่แตกต่างกับค่าปกติบ่อยมากกว่าใรการแจกแจงแบบปกติ ปรากฏการณ์นี้เป็นที่รู้จักกันในชื่อ Kurtosis Risk ดังนั้นค่า Kurtosis ตำ่จึงดีกว่าการลงทุนที่มีค่า Kurtosis สูง
เปิด colab กันเลย
เริ่มต้นด้วย IMPORT LIBERLY
# load packagesimport pandas as pdimport numpy as npimport scipyimport seaborn as snsfrom matplotlib import pyplot as plt# not needed, only to prettify the plots.import datetimeimport matplotlibfrom IPython.display import set_matplotlib_formats%matplotlib inline
ก่อนี่เราจะหาค่าได้เราต้องมีข้อมูลกันก่อนวันนี้จะใช้ข้อมูลผลตอบแทนการลงทุนจาก github ของผมเอง https://github.com/nutdnuy/Portfolio_optimization_with_Python/blob/master/data/Portfolios_Formed_on_ME_monthly_EW.csv
df = pd.read_csv(‘https://raw.githubusercontent.com/nutdnuy/Portfolio_optimization_with_Python/master/data/edhec-hedgefundindices.csv',index_col="date")df
Skewness
วิธีเเรกของเราคือเขียน code ตามสูตรดังนี้
def skewness(r): demeaned_r = r - r.mean() # use the population standard deviation, so set dof=0 sigma_r = r.std(ddof=0) exp = (demeaned_r**3).mean() return exp/sigma_r**3skewness(df)
กับอีกวิธีหนึ่งคือใช้ Scipy
scipy.stats.skew(df)
Kurtosis
การหา Kurtosis ทำคล้ายๆกับ Skewness
def skewness(r):demeaned_r = r - r.mean()# use the population standard deviation, so set dof=0sigma_r = r.std(ddof=0)exp = (demeaned_r**3).mean()return exp/sigma_r**3skewness(df)
หรือ
scipy.stats.skew(df)
อ่านตอนอื่นๆได้ที่
- การคำนวณผลตอบแทนการลงทุนด้วย Python
- การหาความผันผวนของพอร์ตการลงทุนด้วย Python
- การหา Max Drawdown ด้วย Python
- การวัด การเบี่ยงเบนของผลตอบแทนด้วย Python
- การวัด SemiDeviation ด้วย Python
- การวัด VaR. และ CVaR. ด้วย Python
- รีวิวการใช้ ffn. ใน Python
- การหา Top Drawdown ด้วย Python
- การหาค่า Sharpe ratio ด้วย Python
- การหากลุ่มหลักรัพย์ที่เส้นประสิทธิภาพ Efficient Frontier ด้วย Python
- การหา shape ratio สูงสุดและเส้น CML ด้วย Python
- การสร้างมูลค่าตลาดแบบถ่วงน้ำหนักด้วย PYTHON
- ข้อจำกัดของการกระจายความเสี่ยงและการทำประกันพอร์ตการลงทุน
- การจำลอง ผลตอบแทนด้วย RANDOM WALK Generation และ Montecarlo simulation
- Sharpe Style Analysis
- Factor Investing ด้วย Python
- วิเคราะห์ ประเภทกองทุนรวมด้วย Python
- การทำ Portfolio optimization
- สร้างแนวรับแนวต้านวิเคราะห์หุ้นด้วย Python