การวัด การเบี่ยงเบนของผลตอบแทนด้วย Python

การทำ portfolio optimization ด้วย google colab IV

NUTHDANAI WANGPRATHAM
2 min readApr 19, 2020

วันนี้เราจะพูดถึงการเบ้ของผลตอบแทน ภายใต้การแจกแจงแบบปกติผลตอบแทนรายวันหรือรายเดือนจะเป็นไปได้น้อยมากทีมีการเปลี่ยนแปลงอย่างมาก แต่หากเราพิจารณาถึงผลตอบแทนที่เกิดขึ้นจริงจะพบว่ามีโอกาศค่อนข้างมากที่มีผลตอบแทนแบบผิดปกติ

ดังนั้นเราควรพิจารณาความเบ้(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)

อ่านตอนอื่นๆได้ที่

  1. การคำนวณผลตอบแทนการลงทุนด้วย Python
  2. การหาความผันผวนของพอร์ตการลงทุนด้วย Python
  3. การหา Max Drawdown ด้วย Python
  4. การวัด การเบี่ยงเบนของผลตอบแทนด้วย Python
  5. การวัด SemiDeviation ด้วย Python
  6. การวัด VaR. และ CVaR. ด้วย Python
  7. รีวิวการใช้ ffn. ใน Python
  8. การหา Top Drawdown ด้วย Python
  9. การหาค่า Sharpe ratio ด้วย Python
  10. การหากลุ่มหลักรัพย์ที่เส้นประสิทธิภาพ Efficient Frontier ด้วย Python
  11. การหา shape ratio สูงสุดและเส้น CML ด้วย Python
  12. การสร้างมูลค่าตลาดแบบถ่วงน้ำหนักด้วย PYTHON
  13. ข้อจำกัดของการกระจายความเสี่ยงและการทำประกันพอร์ตการลงทุน
  14. การจำลอง ผลตอบแทนด้วย RANDOM WALK Generation และ Montecarlo simulation
  15. Sharpe Style Analysis
  16. Factor Investing ด้วย Python
  17. วิเคราะห์ ประเภทกองทุนรวมด้วย Python
  18. การทำ Portfolio optimization
  19. สร้างแนวรับแนวต้านวิเคราะห์หุ้นด้วย Python

--

--

NUTHDANAI WANGPRATHAM
NUTHDANAI WANGPRATHAM

Written by NUTHDANAI WANGPRATHAM

I am a learner and have a multipotential life. You can contact me at nutdnuy@gmail.com

No responses yet