Correlation VS Causation อย่าสับสน!

Correlation เป็นค่าทางสถิติตัวหนึ่งที่มีการพูดถึงกันบ่อยมากๆ เมื่อต้องการพิจารณาความสัมพันธ์ระหว่างตัวแปร 2 ชุด แต่ถึงแม้ Correlation จะเป็นหนึ่งในกุญแจที่สำคัญในการหา Relationship ระหว่างตัวแปร แต่ก็ต้องคำนึงถึงอยู่เสมอว่า Correlation ไม่ใช่ทุกอย่าง และที่สำคัญคัญ ท่องไว้เลยว่า “Correlation does NOT imply Causation”!!! อะไรคือ Correlation? ค่า Correlation เป็นค่าที่บอกว่าข้อมูล 2 ชุด ที่เราสนใจนั้น มีการเปลี่ยนแปลงที่สัมพันธ์กันหรือไม่ ซึ่งความสัมพันธ์ในที่นี้ก็คือ การที่ค่าของข้อมูลชุดหนึ่งมีการเปลี่ยนแปลง ข้อมูลอีกชุดก็จะมีการเปลี่ยนแปลงด้วย ถ้าข้อมูล 2 ชุด มีความสัมพันธ์กัน ก็จะเรียกได้ว่าเป็นข้อมูลที่ “strong-correlated” มีการเคลื่อนไหวที่สัมพันธ์กัน ซึ่งความสัมพันธ์นี้อาจจะเป็นไปในทางเดียวกัน (Positive Correlation) หรือ ในทางตรงกันข้ามกัน (Negative Correlation) ก็ได้ ในทางกลับกัน ถ้าข้อมูลนั้นไม่มีความสัมพันธ์กัน หรือมีความสัมพันธ์กันต่ำ ข้อมูลนั้นก็เป็นข้อมูลที่ “Low-correlated” เพื่อให้เห็นภาพมากขึ้น เราลองมาดูตัวอย่างข้อมูล และ…

ก้าวแรกของการทำนาย Intro to Seasonality Effect และ Trend Following ในฟอร์มที่ง่ายที่สุด

การเข้าใจ “พฤติกรรมวงจรของราคาหุ้น” และสินทรัพย์อื่นๆ เป็นสิ่งที่สำคัญสำหรับนักลงทุน และนักวิเคราะห์ทั้งหลาย โดยเรามีความเชื่อในตลาดมากมายว่าการเคลื่อนที่ของราคาหุ้นนั้นมีรูปแบบ (Pattern) การเคลื่อนไหวอยู่ในนั้น ฉะนั้นการเข้าใจวงจรเหล่านี้สามารถให้ความรู้มูลค่าสำหรับนักลงทุน ในบทความนี้, เราจะสำรวจพื้นฐานของการวิเคราะห์ผลกระทบจากวงจรของหุ้น โดยใช้ข้อมูลสังเคราะห์ด้วย Python กันครับ เราจะเริ่มจากการสร้างข้อมูลสังเคราะห์ออกมาให้มีวัฏจักร (Cycle) ที่ชัดเจน Sine Wave + Random Noise หน้าตาข้อมูลที่ได้ อันที่จริงไม่หุ้นที่ไหน มีวัฏจักรชัดเจนแบบนี้หรอกครับ แต่เราจะเอามันมาเป็นตัวตั้งต้นในการทำความเข้าใจของความพยายามในการทำนายวัฏจักรของมนุษเราก็แล้วกันครับ Naïve Forecast การทำนายที่ง่ายที่สุด ราคาพรุ่งนี้ = ราคาวันนี้ ถึงจะฟังดูตลกแต่อันนี้่ มีชื่อว่า Naïve Forecast เขียนเป็นสมการและ โค้ด Python ง่ายๆดังนี้ ไม่มีอะไรเลย แค่ให้ราคา shift 1 วัน หรือเอาค่าเมื่อวานมาทำนาวันนี้นี่เอง เราลองมาใช้งานมันดู แทบจะเป็นตัวเดียวกัน ความพยายามก้าวแรกของการทำนายของเรา อันที่จริงก็ไม่ได้มีประโยชน์อะไรมากหรอกครับ หลังจากนั้นมันก็มีความพยายามในการคิดวิธีทำนายอนาคตมาอีกมากมาย อย่างเช่น Naïve with Trend…

นี่มันสุ่มหรือเปล่า? Run Test Analysis ทำความเข้าใจความสุ่ม

ในโลกที่ซับซ้อนของตลาดทุน, การเข้าใจประสิทธิภาพของของตลาดทุนเป็นเรื่องที่สำคัญ. บทความนี้สำรวจแนวคิดของประสิทธิผลตลาดโดยใช้การทดสอบการเคลื่อนไหวของมันด้วยวิธีสถิติที่ออกแบบเพื่อประเมินความสุ่ม Random ของการเคลื่อนไหวราคา โดยใช้ Python กันครับ ดึงไลบราลีที่จำเป็น ตัวที่เพิ่มขึ้นมาจากที่เราใช้ตามปรกติก็คือ ฟังก์ชั่น runstest_1samp ซึ่งเป็นฟังก์ชั่นทดสอบชุดข้อมูลว่าเป็นแบบสุ่มหรือไม่ โดยจะเป็นฟังก์ชั่นที่ใช้กับข้อมูล Binary รายละเอียดดูได้ที่ https://www.statsmodels.org/stable/generated/statsmodels.sandbox.stats.runs.runstest_1samp.html เราจะใช้มันมาในการหาการ Run ของชุดข้อมูล การ Run คือ ลำดับของข้อมูลที่ต่อเนื่องกันที่มีเครื่องหมายเดียวกันบวกหรือลบติดต่อกัน เราจะมาใช้ฟังก์ชั่นในการสร้าง Returns ย่อลงมาแค่เป็น ขึ้นหรือลง 1 และ -1 เป็นจำนวน 100 ตัวและเราก็จะสร้างให้มันเป็น Pattern ตายตัวคือ หุ้นลงตลอด 50 วันแรก และ ขึ้นตลอด50วันหลัง ซึ่งแบบนี้มันชัดเจนมากว่าข้อมูลชุดนี้ไม่ได้สุ่มแต่อย่างใด เราจะใช้ runstest_1samp มาทดสอบและสังเกตผลกัน โดยที่ runstest_1samp คือการทดสอบที่มีสมมุติฐานหลักว่า ข้อมูลของเราเป็นแบบสุ่ม และเราต้องทดสอบหาค่า P-Value ของมันเพื่อมาทดสอบสมมุติฐานั้น ค่าที่ได้มี 2 ค่า คือ Test Statistics…

ทำความเข้าใจ ไดนามิกของตลาดหุ้นด้วย Kolmogorov-Smirnov Test

ตลาดทุนนับเป็นระบบที่มีความซับซ้อนอาจจะมากที่สุดในโลกระบบหนึงแล้ว การจะสร้างโมเดลลงทุนได้อย่างมีประสิทธิภาพไม่ใช่เรื่องง่าย ก่อนจะไปถึงจุดนั้น การเข้าใจการกระจายตัว(Distribution) ของ Returns ของสินทรัพย์นั้นๆเป็นสิ่งที่สำคัญสำหรับการจัดการความเสี่ยงและกลยุทธ์การลงทุน วิธีทางสถิติหนึ่งที่นิยมใช้ในการเปรียบเทียบ Distribution ของข้อมูล 2 ชุดคือ การทดสอบของ Kolmogorov-Smirnov ในบในบทความนี้เราจะสำรวจวิธีการใช้ทดสอบ Kolmogorov-Smirnov Test เพื่อเปรียบเทียบผลตอบแทนของทรัพย์สินที่ 2 ตัว สร้างขึ้นแบบสุ่ม เพื่อทำความเข้าใจ และ จกานั้นจะทำมาทดสอบข้อมูลตลาดหุ้นจริงๆ กันครับ ปล. โค้ดทั้งหมดนะอยู่ในคอร์สที่กำลังจะออกนะครับ ทำความเข้าใจตลาดทุนด้วยข้อมูลสุ่ม Generate Random Returns ก่อนที่เราจะไปดูข้อมูลจริงเราจะมาดู อย่างที่เรารู้กันว่า ตลาดทุนเป็นตลาดที่มีลักษณะนิสัยแบบสุ่มอย่างมาก ข้อมูลเชิงทฤษฎีกันก่อนครับ โดยเราจะสุ่ม Asset 2 ชุด จาก Distribution เดียวกัน(Mean = 0, STD= 1) จำนวนตัวละ 10000 วันจากนั้นนำมา Plot Histogram เพื่อเปรียบเทียบกันดังนี้ จะเห็นว่าหน้าตากราฟระฆังคว่ำคล้ายกันมาก(เพราะมันควรจะเป็นตัวเดียวกันแค่แรนด้อมเลขคนละชุดกัน) Cumulative distribution…

What can data tell? เล่าเรื่องจากข้อมูลด้วยการ Visualization พร้อมตัวอย่างการทำงานกับข้อมูลจริง {Series #2: การ Visualize ข้อมูลตัวแปรเดียวด้วยกราฟอย่างง่าย}

บทความนี้เริ่มต้นจากไม่มีพื้นฐานเลย ดังนั้น จึงเหมาะสำหรับผู้ที่ผู้ที่สนใจทักษะการทำ Data Visualization ด้วย Python ระดับเบื้องต้น อย่างไรก็ตาม ผู้เรียนจำเป็นต้องเขียนโปรแกรมภาษา Python ได้ ดังนั้น ถ้าท่านใดยังไม่เคยเขียนโปรแกรมด้วยภาษาไพทอน สามารถเข้าเรียนฟรี ได้ที่เว็บไซต์ของเราด้านล่างก่อน ก่อนเริ่มเนื้อหาจะสอนพื้นฐานความรู้เกี่ยวกับ Python ที่จำเป็นก่อนประมาณ 2 ครั้ง ถ้าผู้อ่านท่านใดเชี่ยวชาญการใช้ Python อยู่แล้ว สามารถข้ามบทความพื้นฐาน 2 บทความแรกได้เลย การทำงานในสายที่เกี่ยวข้องกับ “ข้อมูล” สมัยนี้ ใครๆ ก็ขยัน “สร้างภาพ” กันทั้งนั้น! แต่การสร้างภาพนี้ไม่ใช่การเอาหน้านะ แต่เป็นการสร้างกราฟขึ้นเพื่อ “เล่าเรื่อง” จากข้อมูลที่มีต่างหาก ในยุคสมัยที่ข้อมูลไหลวนอยู่ในระบบเครือข่ายอย่างบ้าคลั่งนี้ ข้อมูลชุดเดียวกันใครๆ ก็สามารถหาได้ แต่สิ่งที่ต่างกันคือ “เรื่องเล่า” ที่แต่ละคนจะสามารถสกัดออกมาจากข้อมูล และแสดงให้ผู้อื่นเข้าใจได้ต่างหากล่ะ ที่จะตัดสินกันว่าใครจะได้อยู่ต่อ การจะสร้าง “เรื่องเล่า” เจ๋งๆ ได้นั้น แน่นอนว่าจะต้องอาศัยทักษะมากมายในการวิเคราะห์ข้อมูล เพื่อสกัดเอา “ประเด็น” ที่สำคัญ เป็น…

Skewness

“Central Moment” ทางสถิติง่ายๆ ประกอบไปด้วย ทั้งหมดนี่เป็นการ sum ข้อมูลทั้งหมดเหมือนกัน แตกต่างกันแค่ตัวยกกำลัง กำลัง1 (Mean), กำลัง 2 (Variance), กำลัง 3 (Skewness), กำลัง 4 (Kurtosis) ตามลำดับ เท่านั้น จริงๆ เรื่องง่ายๆ ทางคณิตสาตร์นี่ก็ดีนะครับ เพราะทั้ง 4 แบบสามารถบ่งบอกลักษณะนิสัยของข้อมูลได้ต่างกันหมดเลย ในวันนี้ เราจะพูดถึงเฉพาะในส่วนของ “ความเบ้” กันอย่างเดียว และมาดูว่าเราสามารถวิเคราะห์การลงทุน ผ่านสถิติง่ายๆ ตัวนี้ได้อย่างไร ถ้าพูดกันถึงเรื่องการแจกแจงปรกติ ถ้าผลกำไรต่อการเทรดแต่ละไม้ของ 10,000 ครั้ง มีค่าเฉลี่ยเราอยู่ 0.25% (สมมุติ) และ ด้วยโชคดีฟ้าประธานมาให้ return ของเรามีการแจกแจงแบบปรกติจะได้กราฟประมาณนี้นะครับ นั่นหมายความว่า การเคลื่อนที่มากกว่า + หรือ – 2 sigma (standard deviation) จากค่าเฉลี่ย…

สอนวิเคราะห์ข้อมูล [ฉบับจับมือทำ] ตั้งแต่เบื้องต้น ถึงการสร้างโมเดล Machine Learning ผ่านข้อมูล การ ซื้อ-ขาย ผลไม้เพื่อสุขภาพยอดฮิตอย่าง Avocado {Part 3: Machine Learning}

บทความนี้เป็นบทความที่ 3 ในบทความชุด “สอนวิเคราะห์ข้อมูล [ฉบับจับมือทำ] ตั้งแต่เบื้องต้น ถึงการสร้างโมเดล Machine Learning ผ่านข้อมูล การ ซื้อ-ขาย ผลไม้เพื่อสุขภาพยอดฮิตอย่าง Avocado” ก่อนที่จะเริมบทความความนี้ ขออนุญาติรวบรวมลิงก์บทความทั้งชุดนี้ให้ก่อนนะคะ เผื่อใครยังไม่ได้อ่าน 2 บทความแรก จะได้ไปติดตามได้ เนื่องจากบทความทั้ง 3 เป็นบทความที่ต่อเนื่องกัน จึงแนะนำให้อ่านเรียงตามลำดับ ดังนี้ 1. สอนวิเคราะห์ข้อมูล [ฉบับจับมือทำ] ตั้งแต่เบื้องต้น ถึงการสร้างโมเดล Machine Learning ผ่านข้อมูล การ ซื้อ-ขาย ผลไม้เพื่อสุขภาพยอดฮิตอย่าง Avocado {Part 1: Descriptive Analysis} 2. สอนวิเคราะห์ข้อมูล [ฉบับจับมือทำ] ตั้งแต่เบื้องต้น ถึงการสร้างโมเดล Machine Learning ผ่านข้อมูล การ ซื้อ-ขาย ผลไม้เพื่อสุขภาพยอดฮิตอย่าง Avocado {Part 2:…

ผลกระทบของการไม่ Rebalance พร้อม (Python code)

“การลงทุนที่ดีที่การลงทุนที่กำไรมากที่สุด” นั่นมันสำหรับมือใหม่เค้าว่ากันครับ การลงทุนที่ได้กำไรมากๆ อาจจะเป็นการลงทุนที่ห่วยแตกก็ได้ และเราไปสนใจกับแค่ช่วงเวลาหนึ่งๆ (one point in time) แล้วพบว่าระบบลงทุนของเรานี่มันดี เพราะทำกำไรได้มาก แต่จริงๆ อาจจจะฟลุ๊กก็ได้ ในการลงทุนที่ดี สิ่งที่ต้องสนใจไม่แพ้ผลกำไร ก็คือ “ความเสี่ยง” ครับ portfolio ที่ดีจะต้องให้น้ำหนักกับเรื่องนี้ให้มาก วันนี้เราเลยจะมาดูเรื่องผลกระทบของการ “Rebalance Portfolio” กันครับ โดยตัวอย่างที่ผมเลือกมาเพื่อให้เราเห็นว่า การลงทุนที่ดีที่สุดไม่จำเป็นต้องทำกำไรมากที่สุด และทำไมต้อง Rebalanced Portfolio กันครับ ก่อนอื่นดึง library ที่ต้องใช้มาก่อน ก็ตัวเดิมๆทั้งนั้น ดึงข้อมูลหุ้น สองตัว Google และ 3M อันนี้เราจะเลือกสุ่มๆนะครับ และเพื่อความเรียบง่าย ผมจะใช้แค่หุ้น 2 ตัวในพอร์ตเป็นตัวอย่าง เราจะสมมุติว่าการถือหุ้นสองตัวนี้จะแบบ equal weight จะดีกับ risk profile ก็แล้วกันครับ หา return ของหุ้นทั้ง 2…

จัดการข้อมูลอย่าง Quants [Part2: จัดการ Missing Value และ คำนวณ Statistics สำหรับข้อมูลทั้งตลาด]

บทความชุดนี้เราจะมาเอาใจสายลงทุนกัน ด้วยบทความชุด “จัดการข้อมูลอย่าง Quants” ซึ่งจะประกอบไปด้วย 3 บทความด้วยกัน ดังนี้ 1.จัดการข้อมูลอย่าง Quants [Part 1: ดึงข้อมูลหุ้น S&P500 ทั้ง 500 ตัว] 2. หลากหลายวิธีกับการจัดการกับ “Missing Value” 3. จัดการข้อมูลอย่าง Quant [Part2: จัดการ Missing Value และ คำนวณ Statistics สำหรับข้อมูลทั้งตลาด บทความทั้งหมดจะเป็น Tutorial สำหรับผู้ที่สนใจการดึงข้อมูลหุ้นเพื่อการลงทุนแบบไม่เสียค่าใช้จ่าย! อ่านไปด้วย Coding ไปด้วยได้เลยครับ บทความที่ 3 นี้ นี้เป็นตัวต่อจากบทความที่แล้ว ฉะนั้นเราคาดหวังว่าผู้อ่านจะมีไฟล์ “sp500_data.xlsx” ที่เราทำกันมาในบทความที่ 1 กันแล้วนะครับ ถ้าท่านใดยังไม่มีไฟล์ สามารถอ่านวิธีการจัดการดาวน์โหลดข้อมูล และสร้างไฟล์ได้ที่ บทความที่ 1 “จัดการข้อมูลอย่าง Quants [Part…

หลากหลายวิธีกับการจัดการกับ “Missing Value”

หลายวันก่อนผมไมได้รับคำถามจากผู้เรียนในคอร์สมาว่า “ถ้ามีข้อมูลที่ Missing Value แล้วเราสามารถทำอะไรได้บ้างนอกจากลบวันที่มีค่า Drop มันทิ้งไป เราสามารถ Forward Fill (เติม Missing Value ด้วยค่าล่าสุดที่เรารู้) ได้ไหม” โดยปกติ Tutorial ทั้งไทย และต่างประเทศส่วนใหญ่ มักจะนำเสนอก็คือ การดึงข้อมูลมาจากผู้ให้บริการซักเจ้า จากชั้น Check ว่ามี Missing Value aka N.A. อยู่ในข้อมูลนั้นไหม ถ้ามี ก็ Drop มันทิ้ง ซึ่งใช่ครับในคอร์ส Python for Finance เราก็สอนแค่นั้น เพราะนั่นคือ คอร์สเบื้องต้นสอนความรู้กว้างๆ ถ้าในคอร์ส AI for Investment เราสอนอีกแบบโดยการใช้ Forward Fill ซึ่งก็เป็นอีกวิธีในการจัดการกับข้อมูล Missing Value เหล่านั้นเพื่องานเฉพาะสำหรับ Project ในคอร์สนั้นๆ แต่คำถามนั้นทำให้ผมคิดได้ ว่ามันเราลืมพูดถึงเรื่องนี้ไปสนิทเลย…

สอนวิเคราะห์ข้อมูล [ฉบับจับมือทำ] ตั้งแต่เบื้องต้น ถึงการสร้างโมเดล Machine Learning ผ่านข้อมูล การ ซื้อ-ขาย ผลไม้เพื่อสุขภาพยอดฮิตอย่าง Avocado {Part 2: EDA}

บทความนี้เป็นบทความที่ 2 ของบทความชุด “สอนวิเคราะห์ข้อมูล [ฉบับจับมือทำ] ตั้งแต่เบื้องต้นถึงการสร้างโมเดล Machine Learning ผ่านข้อมูลการซื้อขายผลไม้เพื่อสุขภาพยอดฮิตอย่าง Avocado” เนื่องจากบทความชุดนี้เป็นบทความที่มีเนื้อหาต่อเนื่องกัน! ดังนั้น เพื่อให้เกิดความเข้าใจ และเป็นประโยชน์สูงสุด ขอแนะนำให้ผู้อ่านเริ่มจากบทความแรกก่อน โดยสามาถอ่านได้ที่ลิงก์ด้านล่างค่ะ บทความที่ 1 อ่านบทความแรกกันไปแล้ว ก็พร้อมแล้วสำหรับเนื้อหาของบทความที่ 2 นี้ ไปเริ่มกันเลยค่ะ อะไรคือ EDA EDA หรือ Exploratory Data Analysis คือ กระบวนการสำรวจข้อมูลเบื้องต้นที่จำเป็น ก่อนที่จะเริ่มการวิเคราะห์ข้อมูลในเชิงลึกแบบอื่นๆ เช่น การทำนายข้อมูล (Predictive) การทำ EDA จะทำการสำรวจข้อมูลในหลายๆ แง่มุม ทั้งในรูปแบบการสำรวจโดยแยกเป็นแต่ละประเภทของข้อมูล และ นำไปสู่การสำรวจความสัมพันธ์ระหว่างตัวแปรที่เกี่ยวข้องในข้อมูลนั้นๆ โดยประโยชน์ของ EDA คือ การมีความเข้าใจข้อมูล และความสำพันธ์ของตัวแปรที่เกี่ยวข้องมากขึ้น หรือ เรียกว่าการหา Insights ของข้อมูล นั่นเอง การทำ EDA…

สอนวิเคราะห์ข้อมูล [ฉบับจับมือทำ] ตั้งแต่เบื้องต้น ถึงการสร้างโมเดล Machine Learning ผ่านข้อมูล การ ซื้อ-ขาย ผลไม้เพื่อสุขภาพยอดฮิตอย่าง Avocado {Part 1: Descriptive Analysis}

อะโวคาโด้ (Avocado) เป็นผลไม้เพื่อสุขภาพที่กำลังได้รับความนิยมเป็นอย่างมาก ทานก็อร่อย เอาข้อมูลมาวิเคราะห์ก็สนุก 🙂 จากการที่เป็นหนึ่งในผลไม้ยอดฮิต ที่มีราคาสูงเป็นอันดับต้นๆ จึงมีการเก็บข้อมูลผลผลิต ข้อมูลราคา และการซื้อขาย อย่างแพร่หลาย เพื่อให้ได้ประโยชน์จากการค้าอะโวคาโด้มากที่สุด เราจึงจับเอาข้อมูลราคา และการซื้อขายเจ้าอะโวคาโด้มาเป็นตัวแทน เพื่อสอนการวิเคราะห์ข้อมูลตั้งแต่เบื้องต้น ไปจนถึงสามารถสร้างโมเดลเพื่อทำนายข้อมูลด้วย Machine Learning ได้ เนื่องจากการวิเคราะห์ข้อมูลมีรายละเอียดค่อนข้างมาก จึงจัดแบ่งหัวข้อ และ บทความออกเป็นส่วนๆ ดังนี้ Part 1: การอ่านข้อมูล ทำความสะอาดเบื้องต้น และการวิเคราะห์ข้อมูลเชิงบรรยาย (Descriptive Analysis) Part 2: การวิเคราะห์ข้อมูลเพื่อสำรวจข้อมูลในเชิงความสัมพันธ์ EDA (Exploratory data analysis) เพื่อค้นหาลักษณะเฉพาะของข้อมูล และทดสอบสมมุติฐานเบื้องต้น Part 3: การวิเคราะห์ข้อมูลเชิงลึก และการสร้างโมเดลในการทำนายข้อมูลด้วย Machine Learning มาเริ่มกันเลยดีกว่าค่ะ 1. โหลด Library ที่จำเป็น General libraries ไลบรารี่พื้นฐานต่างๆ…