top of page

Factor investing 101

การลงทุนด้วยปัจจัยได้รับความนิยมอย่างมากในด้านการจัดการพอร์ตโฟลิโอสมัยใหม่ เพราะเป็นแนวทางการลงทุนอย่างเป็นระบบที่เน้นปัจจัยเสี่ยงหรือลักษณะการลงทุนเฉพาะ เช่น มูลค่า ขนาด โมเมนตัม และคุณภาพ เพื่อสร้างพอร์ตการลงทุน ความเติบโตของแมชชีนเลิร์นนิงในการลงทุนด้านปัจจัยมีที่มาที่จุดบรรจบของการพัฒนาที่เอื้ออำนวย 3 ประการ ได้แก่ ความพร้อมใช้งานของข้อมูล ความสามารถในการคำนวณ และพื้นฐานทางเศรษฐกิจ ในบทความชุดนี้เราจะพาทุกท่านเรียนรู้การประยุกต์ใช้ ML ในกรอบการลงทุนเชิงปัจจัยหรือ Factor Investing กัน


Factor investing และ asset pricing anomalies

การลงทุนเชิงปัจจัยหรือ Factor investing ได้รับความนิยมอย่างมากในด้านการจัดการพอร์ตโฟลิโอสมัยใหม่ หมายถึงแนวทางการลงทุนอย่างเป็นระบบที่เน้นปัจจัยเสี่ยงหรือลักษณะการลงทุนเฉพาะ เช่น มูลค่า ขนาด โมเมนตัม และคุณภาพ เพื่อสร้างพอร์ตการลงทุน เชื่อกันว่าปัจจัยเหล่านี้แสดงค่าพรีเมียที่มีความเสี่ยงแบบถาวรในอดีต ซึ่งสามารถใช้ประโยชน์เพื่อให้ได้ผลตอบแทนที่ปรับตามความเสี่ยงได้ดีขึ้น


รากฐานทางประวัติศาสตร์ของการลงทุนเชิงปัจจัยสามารถย้อนกลับไปได้หลายทศวรรษที่ผ่านมา ในช่วงทศวรรษที่ 1960 นักวิชาการรุ่นบุกเบิกอย่าง Eugene F. Fama และ Kenneth R. French ได้ทำการวิจัยที่ก้าวล้ำซึ่งเป็นรากฐานสำหรับการลงทุนด้านปัจจัยสมัยใหม่ พวกเขาระบุปัจจัยเสี่ยงเฉพาะที่สามารถอธิบายความผันแปรของผลตอบแทนของหุ้นได้ เช่น ปัจจัยด้านมูลค่า (หุ้นที่มีอัตราส่วนราคาต่อบัญชีต่ำมักจะมีประสิทธิภาพดีกว่า) ปัจจัยด้านขนาด (หุ้นขนาดเล็กมักจะมีประสิทธิภาพดีกว่าหุ้นขนาดใหญ่) และปัจจัยด้านโมเมนตัม (หุ้นที่มีแนวโน้มราคาเป็นบวกเมื่อเร็วๆ นี้มักจะทำผลงานได้ดีกว่า)


ด้วยการรวมกลยุทธ์ที่อิงตามปัจจัยเข้ากับพอร์ตการลงทุน นักลงทุนสามารถตั้งเป้าที่จะบรรลุการกระจายความเสี่ยงที่เพิ่มขึ้น ผลตอบแทนที่ปรับตามความเสี่ยงที่ดีขึ้น และการจัดการความเสี่ยงที่ดีขึ้น การลงทุนด้วยปัจจัยเป็นอีกทางเลือกหนึ่งสำหรับกลยุทธ์การถ่วงน้ำหนักตามราคาตลาดแบบดั้งเดิม ช่วยให้นักลงทุนมีโอกาสได้รับผลตอบแทนส่วนเกินโดยมุ่งเน้นไปที่ปัจจัยเสี่ยงเฉพาะที่แสดงให้เห็นถึงประสิทธิภาพในอดีต


สาเหตุหลักที่ทำให้การลงทุนแบบ Factor Investing เป็นที่นิยมนั้นอาจเป็นเพราะว่าการลงทุนแบบ Factor Investing สามารถอธิบายได้ง่าย และมีประสิทธิภาพในการบริหารการลงทุน


การสร้างแบบจำลองเชิงปปัจจัยไม่ใช่เรื่องยากหรือแม้เเต่การใช้จาก Provider ต่าง ๆ อาทิเช่น MSCI แต่ความยากของงานการลงทุนเชิงปัจจัยคือการพยายามหาปัจจัยที่สามารถให้ผลตอบแทนชนะตลาด หรือแม้กระทั้งการระบุปัจจัยที่เหมาะสมกับสภาวะตลาด เพื่อให้เข้าใจสิ่งนี้เราจะไปลองทำพร้อมกันด้วย Python กันเลย



Factor investing with Python


เราจะใช้ชุดข้อมูล “200+ Financial Indicators of US stocks (2014–2018)” จาก Kaggle เพื่อแยกแยะรูปแบบและความแตกต่างระหว่างหุ้นที่มีประสิทธิภาพดีเมื่อเทียบกับหุ้นที่ไม่มีประสิทธิภาพ โดยใช้ประโยชน์จากความรู้ที่ได้รับจากการวิเคราะห์นี้ แบบจำลองสามารถทำนายว่าหุ้นใดมีแนวโน้มที่จะมีกำไรจากการลงทุน อย่างไรก็ตามบทความนี้เป็นเพียงจุดเริ่มต้น และแม้ว่ามันอาจจะไม่สมบูรณ์แบบ


Import Data

ผมเขียน code ไว้ในnotebook แล้ว คุณสามารถทำตามได้ สิ่งแรกที่เราจะทำคือนำเข้าข้อมูล ฉันได้ดาวน์โหลดข้อมูลและบันทึกไว้ใน Google ไดรฟ์



!gdown --id 10asORoUJ1Sj07bNNbVVWqPAxQhqsVEXw 
!gdown --id 1nJAE7FJeV9cZZiqjpXEawhK41xdkFybb
!gdown --id 1WvpO8OmgFPG-aLM-iDZJ5A6O73u2Lo-b
!gdown --id 1AiRax6xFAq3zTm625xY5Kx91bbRvx-kO
!gdown --id 1we3vPt1ldoR5CksuaiIvEhf4_xdnTkKh

df_2014 = pd.read_csv("2014_Financial_Data.csv")
df_2015 = pd.read_csv("2015_Financial_Data.csv")
df_2016 = pd.read_csv("2016_Financial_Data.csv")
df_2017 = pd.read_csv("2017_Financial_Data.csv")
df_2018 = pd.read_csv("2018_Financial_Data.csv")

Prepare data & Exploration analysis

การทำความเข้าใจข้อมูลเป็นขั้นตอนสำคัญในกระบวนการแมชชีนเลิร์นนิง ไม่แนะนำให้ป้อนข้อมูลลงในแบบจำลองโดยปราศจากความเข้าใจที่ถูกต้องเกี่ยวกับคุณลักษณะ คุณภาพ และความเกี่ยวข้องกับปัญหาที่มีอยู่ จำเป็นอย่างยิ่งที่จะต้องวิเคราะห์ข้อมูลอย่างถี่ถ้วนและเข้าถึงข้อมูลนั้นด้วยกรอบความคิดที่เฉียบแหลม


ในฐานะผู้ปฏิบัติงานที่รับผิดชอบด้านแมชชีนเลิร์นนิง เราต้องใช้วิธีการวิเคราะห์ข้อมูลอย่างพิถีพิถัน ซึ่งรวมถึงการประมวลผลข้อมูลล่วงหน้าเพื่อจัดการกับค่าที่ขาดหายไป ปรับข้อมูลให้เป็นมาตรฐาน และระบุค่าที่ผิดปกติ เทคนิคการวิเคราะห์ข้อมูลเชิงสำรวจ (EDA) ยังสามารถให้ข้อมูลเชิงลึกที่มีค่าและช่วยเปิดเผยรูปแบบภายในข้อมูล


เราใช้ฟังก์ชัน describe() เพื่ออธิบายข้อมูล



df_2014.describe()


แน่นอนว่ามีตัวแปรมากมาย และการทำความเข้าใจข้อมูลอาจไม่ใช่เรื่องง่าย นอกจากนี้ ข้อมูลบางอย่างมีมาตราส่วนที่แตกต่างกัน การใช้ตัวแปรเลยไม่ใช่ความคิดที่ดี เราจะกลับมาที่สิ่งนี้ในภายหลัง ตอนนี้เราจะดูที่ตัวแปรเป้าหมาย (ราคา VAR [%])


fig = plt.figure(figsize =(10, 7))
# Creating plot
plt.boxplot(data)

เราจะเห็นว่าข้อมูลมีค่า Outlier ผมแนะนำให้เราตัดค่าผิดปกติออก

df_no_outliers = df[df["PRICE VAR [%]"] > df["PRICE VAR [%]"].quantile(.05)  ] & df[df["PRICE VAR [%]"] < df["PRICE VAR [%]"].quantile(.95)  ]

นอกจากวิธีนี้แล้ว เรายังสามารถแทนค่าที่เกินขีดจำกัดที่เรากำหนดเป็นค่าในขีดจำกัดของเราได้อีกด้วย


ในขั้นตอนถัดไป เราต้องการรวมข้อมูลในช่วงหลายปี โดยใช้ตัวแปรเป็นผลตอบแทน โดยไม่สนใจผลกระทบของตลาด เราต้องลบผลตอบแทนของตลาดออกก่อน ซึ่งโดยทั่วไปเราใช้ผลตอบแทนของดัชนี แต่ที่นี่เราไม่มีผลตอบแทน ดังนั้นเราอาจใช้ค่ามัธยฐาน (Mean/mod) แทน


df_2014["Alpha"] =  df_2014["2015 PRICE VAR [%]"] - df_2014["2015 PRICE VAR [%]"].mean()
df_2015["Alpha"] =  df_2015["2016 PRICE VAR [%]"] - df_2015["2016 PRICE VAR [%]"].mean()
df_2016["Alpha"] =  df_2016["2017 PRICE VAR [%]"] - df_2016["2017 PRICE VAR [%]"].mean()
df_2017["Alpha"] =  df_2017["2018 PRICE VAR [%]"] - df_2017["2018 PRICE VAR [%]"].mean()
df_2018["Alpha"] =  df_2018["2019 PRICE VAR [%]"] - df_2018["2019 PRICE VAR [%]"].mean()The next step we

df_all =  pd.concat([df_2014, df_2015, df_2016, df_2017, df_2018], axis=0)

เรามีทั้งหมด 230 คอลัมน์ มันคงบ้าไปแล้วถ้าเราจะนั่งดูทีละตัวแปรเลยต้องตัดบางตัวแปรออกไปก่อน เราจะจัดการกับข้อมูล na และปล่อย na ให้มากขึ้น



data_info = pd.set_option('display.max_columns', None)
data_info=pd.DataFrame(df_all.dtypes).T.rename(index={0:'column type'})
data_info=data_info.append(pd.DataFrame(df_all.isnull().sum()).T.rename(index={0:'null values (nb)'}))
data_info=data_info.append(pd.DataFrame(df_all.isnull().sum()/df_all.shape[0]*100).T.
rename(index={0:'null values (%)'}))
display(data_info)

เราจะลบตัวแปรที่มี na มากกว่า 2,500


nas_by_feature = df_all.isnull().sum(axis=0)
features_to_drop = nas_by_feature[nas_by_feature>2500].index
df_all.drop(features_to_drop, axis=1, inplace=True)

Look for Correlation

ณ จุดนี้ เราอาจสร้างตัวแปรเพิ่มเติมมากมาย เช่น การจัดอันดับ ซึ่งใช้กันทั่วไปในการดำเนินการนี้ ปัจจัยการลงทุนแต่จะขอไม่กล่าวถึงในที่นี้


ความสัมพันธ์หมายถึงการวัดทางสถิติของความสัมพันธ์หรือความสัมพันธ์ระหว่างตัวแปรสองตัว บ่งชี้ว่าตัวแปรทั้งสองมีความสัมพันธ์กันอย่างใกล้ชิดเพียงใด ตลอดจนทิศทางและความแข็งแกร่งของความสัมพันธ์



correlation = df_all.corr()
correlation["Alpha"]
correlation["Alpha"].sort_values( ascending=False).head(10)




เราจะมีความสัมพันธ์เชิงบวกกับตัวแปรอัลฟ่า และเราสามารถหาตัวแปรสัมพันธ์เชิงลบได้เช่นกัน




มาถึงจุดนี้เราก็จะเห็นได้ว่า Factor ใดส่งผลต่อค่า alpha ในอดีตหากเราคาดว่า Factor ดังนั้นกล่าวตลาดยังไม่รับรู้ Factor นั้นก็ยังคงให้ alpha ต่อไป

สรุป

เราได้รู้จักการลงทุนเชิงปัจจัยเบื่องต้นรวมถึงการใช้ Python ในงานด้านการลงทุนเชิงปัจจัย ในคราวหน้าเราจะมาต่อยอดด้วย ML กัน


ดู 150 ครั้ง0 ความคิดเห็น

โพสต์ล่าสุด

ดูทั้งหมด

Portfolio Insurance

Comments


bottom of page