เรื่องเล่าจาก NSHipster: เมื่อความไม่แน่นอนกลายเป็นชนิดข้อมูล
ในโลกของการเขียนโปรแกรม เรามักชินกับการตัดสินใจแบบ “จริงหรือเท็จ” ผ่าน Boolean แต่ในชีวิตจริง เช่น GPS หรือเซนเซอร์ต่าง ๆ ข้อมูลที่เราได้มักจะมี “ความไม่แน่นอน” ปะปนอยู่เสมอ แล้วทำไมโค้ดเราถึงไม่สะท้อนสิ่งนั้น?
บทความจาก NSHipster ได้หยิบแนวคิดจากงานวิจัยของ Microsoft Research และ University of Washington ที่เสนอชนิดข้อมูลใหม่ชื่อว่า Uncertain<T> ซึ่งเป็นการนำความน่าจะเป็นมาใส่ใน type system โดยตรง เช่น แทนที่จะบอกว่า “คุณถึงที่หมายแล้ว” ด้วย if statement ธรรมดา เราอาจพูดว่า “คุณถึงที่หมายแล้ว ด้วยความมั่นใจ 95%” ซึ่งสะท้อนความจริงได้มากกว่า
แนวคิดนี้ถูกนำมาเขียนใหม่ใน Swift โดยใช้ distribution ต่าง ๆ เช่น Rayleigh, Normal, Bernoulli, Exponential และ Mixture เพื่อจำลองความไม่แน่นอนในข้อมูลจริง ตั้งแต่ GPS, ความเร็ว, ความหนาแน่นของอากาศ ไปจนถึงพฤติกรรมผู้ใช้และ latency ของ API
นอกจากนี้ยังมีการใช้ Monte Carlo sampling เพื่อประเมินผลลัพธ์จากการสุ่มหลายพันครั้ง และใช้ Sequential Probability Ratio Testing (SPRT) เพื่อปรับจำนวน sample อัตโนมัติตามความซับซ้อนของเงื่อนไข
แนวคิดของ Uncertain<T>
เป็นชนิดข้อมูลที่รวมความน่าจะเป็นเข้าไปใน type system
ใช้แทนค่าที่มีความไม่แน่นอน เช่น GPS, sensor, user behavior
เปลี่ยนจาก true/false เป็น Uncertain<Bool> ที่มีค่า probability
การใช้งานใน Swift
มีการ port จาก C# มาเป็น Swift library พร้อมตัวอย่างการใช้งาน
รองรับ distribution หลายแบบ เช่น normal, exponential, kumaraswamy
ใช้ SPRT เพื่อปรับจำนวน sample ตามความซับซ้อนของเงื่อนไข
ตัวอย่างการใช้งานจริง
GPS ที่มี horizontal accuracy ถูกแปลงเป็น Uncertain<CLLocation>
การคำนวณความเร็ว, ความต้านทานอากาศ, หรือ comfort index ใช้ค่าที่มี standard deviation
การประเมินว่า “สามารถวิ่ง 5K ได้” ถูกคำนวณจากหลายเงื่อนไขรวมกัน
การใช้ Monte Carlo sampling
ใช้สุ่มหลายพันครั้งเพื่อประเมิน expected value หรือ confidence
ตัวอย่างเช่น slot machine ที่คำนวณ expected payout จากการ spin 10,000 ครั้ง
การวิเคราะห์สถิติ
รองรับการคำนวณ mean, standard deviation, confidence interval
วิเคราะห์ shape ของ distribution เช่น skewness และ kurtosis
รองรับ entropy และ mode สำหรับข้อมูลแบบ discrete
https://nshipster.com/uncertainty/
ในโลกของการเขียนโปรแกรม เรามักชินกับการตัดสินใจแบบ “จริงหรือเท็จ” ผ่าน Boolean แต่ในชีวิตจริง เช่น GPS หรือเซนเซอร์ต่าง ๆ ข้อมูลที่เราได้มักจะมี “ความไม่แน่นอน” ปะปนอยู่เสมอ แล้วทำไมโค้ดเราถึงไม่สะท้อนสิ่งนั้น?
บทความจาก NSHipster ได้หยิบแนวคิดจากงานวิจัยของ Microsoft Research และ University of Washington ที่เสนอชนิดข้อมูลใหม่ชื่อว่า Uncertain<T> ซึ่งเป็นการนำความน่าจะเป็นมาใส่ใน type system โดยตรง เช่น แทนที่จะบอกว่า “คุณถึงที่หมายแล้ว” ด้วย if statement ธรรมดา เราอาจพูดว่า “คุณถึงที่หมายแล้ว ด้วยความมั่นใจ 95%” ซึ่งสะท้อนความจริงได้มากกว่า
แนวคิดนี้ถูกนำมาเขียนใหม่ใน Swift โดยใช้ distribution ต่าง ๆ เช่น Rayleigh, Normal, Bernoulli, Exponential และ Mixture เพื่อจำลองความไม่แน่นอนในข้อมูลจริง ตั้งแต่ GPS, ความเร็ว, ความหนาแน่นของอากาศ ไปจนถึงพฤติกรรมผู้ใช้และ latency ของ API
นอกจากนี้ยังมีการใช้ Monte Carlo sampling เพื่อประเมินผลลัพธ์จากการสุ่มหลายพันครั้ง และใช้ Sequential Probability Ratio Testing (SPRT) เพื่อปรับจำนวน sample อัตโนมัติตามความซับซ้อนของเงื่อนไข
แนวคิดของ Uncertain<T>
เป็นชนิดข้อมูลที่รวมความน่าจะเป็นเข้าไปใน type system
ใช้แทนค่าที่มีความไม่แน่นอน เช่น GPS, sensor, user behavior
เปลี่ยนจาก true/false เป็น Uncertain<Bool> ที่มีค่า probability
การใช้งานใน Swift
มีการ port จาก C# มาเป็น Swift library พร้อมตัวอย่างการใช้งาน
รองรับ distribution หลายแบบ เช่น normal, exponential, kumaraswamy
ใช้ SPRT เพื่อปรับจำนวน sample ตามความซับซ้อนของเงื่อนไข
ตัวอย่างการใช้งานจริง
GPS ที่มี horizontal accuracy ถูกแปลงเป็น Uncertain<CLLocation>
การคำนวณความเร็ว, ความต้านทานอากาศ, หรือ comfort index ใช้ค่าที่มี standard deviation
การประเมินว่า “สามารถวิ่ง 5K ได้” ถูกคำนวณจากหลายเงื่อนไขรวมกัน
การใช้ Monte Carlo sampling
ใช้สุ่มหลายพันครั้งเพื่อประเมิน expected value หรือ confidence
ตัวอย่างเช่น slot machine ที่คำนวณ expected payout จากการ spin 10,000 ครั้ง
การวิเคราะห์สถิติ
รองรับการคำนวณ mean, standard deviation, confidence interval
วิเคราะห์ shape ของ distribution เช่น skewness และ kurtosis
รองรับ entropy และ mode สำหรับข้อมูลแบบ discrete
https://nshipster.com/uncertainty/
🎙️ เรื่องเล่าจาก NSHipster: เมื่อความไม่แน่นอนกลายเป็นชนิดข้อมูล
ในโลกของการเขียนโปรแกรม เรามักชินกับการตัดสินใจแบบ “จริงหรือเท็จ” ผ่าน Boolean แต่ในชีวิตจริง เช่น GPS หรือเซนเซอร์ต่าง ๆ ข้อมูลที่เราได้มักจะมี “ความไม่แน่นอน” ปะปนอยู่เสมอ แล้วทำไมโค้ดเราถึงไม่สะท้อนสิ่งนั้น?
บทความจาก NSHipster ได้หยิบแนวคิดจากงานวิจัยของ Microsoft Research และ University of Washington ที่เสนอชนิดข้อมูลใหม่ชื่อว่า Uncertain<T> ซึ่งเป็นการนำความน่าจะเป็นมาใส่ใน type system โดยตรง เช่น แทนที่จะบอกว่า “คุณถึงที่หมายแล้ว” ด้วย if statement ธรรมดา เราอาจพูดว่า “คุณถึงที่หมายแล้ว ด้วยความมั่นใจ 95%” ซึ่งสะท้อนความจริงได้มากกว่า
แนวคิดนี้ถูกนำมาเขียนใหม่ใน Swift โดยใช้ distribution ต่าง ๆ เช่น Rayleigh, Normal, Bernoulli, Exponential และ Mixture เพื่อจำลองความไม่แน่นอนในข้อมูลจริง ตั้งแต่ GPS, ความเร็ว, ความหนาแน่นของอากาศ ไปจนถึงพฤติกรรมผู้ใช้และ latency ของ API
นอกจากนี้ยังมีการใช้ Monte Carlo sampling เพื่อประเมินผลลัพธ์จากการสุ่มหลายพันครั้ง และใช้ Sequential Probability Ratio Testing (SPRT) เพื่อปรับจำนวน sample อัตโนมัติตามความซับซ้อนของเงื่อนไข
✅ แนวคิดของ Uncertain<T>
➡️ เป็นชนิดข้อมูลที่รวมความน่าจะเป็นเข้าไปใน type system
➡️ ใช้แทนค่าที่มีความไม่แน่นอน เช่น GPS, sensor, user behavior
➡️ เปลี่ยนจาก true/false เป็น Uncertain<Bool> ที่มีค่า probability
✅ การใช้งานใน Swift
➡️ มีการ port จาก C# มาเป็น Swift library พร้อมตัวอย่างการใช้งาน
➡️ รองรับ distribution หลายแบบ เช่น normal, exponential, kumaraswamy
➡️ ใช้ SPRT เพื่อปรับจำนวน sample ตามความซับซ้อนของเงื่อนไข
✅ ตัวอย่างการใช้งานจริง
➡️ GPS ที่มี horizontal accuracy ถูกแปลงเป็น Uncertain<CLLocation>
➡️ การคำนวณความเร็ว, ความต้านทานอากาศ, หรือ comfort index ใช้ค่าที่มี standard deviation
➡️ การประเมินว่า “สามารถวิ่ง 5K ได้” ถูกคำนวณจากหลายเงื่อนไขรวมกัน
✅ การใช้ Monte Carlo sampling
➡️ ใช้สุ่มหลายพันครั้งเพื่อประเมิน expected value หรือ confidence
➡️ ตัวอย่างเช่น slot machine ที่คำนวณ expected payout จากการ spin 10,000 ครั้ง
✅ การวิเคราะห์สถิติ
➡️ รองรับการคำนวณ mean, standard deviation, confidence interval
➡️ วิเคราะห์ shape ของ distribution เช่น skewness และ kurtosis
➡️ รองรับ entropy และ mode สำหรับข้อมูลแบบ discrete
https://nshipster.com/uncertainty/
0 Comments
0 Shares
23 Views
0 Reviews