ใบ้หวย

ผมไม่เคยซื้อหวย/ล็อตเตอรี่เลยครับ ไม่ว่าจะบนดินใต้ดิน ไม่เคยแม้แต่น้อย

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

วันนี้จึงได้ฤกษ์มหามงคล มาใบ้หวยกันดีกว่า

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

ตอนแรกผมไม่แน่ใจว่าบนเว็บสำนักงานสลากมีผลล็อตเตอรี่ย้อนหลังให้แค่ไหน แต่เอาจริงมีผลย้อนหลัง (เลขท้าย 2 ตัวและ 3 ตัว) ไปถึงปี 43 นับถึงปีนี้ (49) ก็ 6 ปีหน่อยๆ มีการออกหวยทั้งหมด 149 ครั้งก็นับว่ามีข้อมูลจำนวนมากพอสมควร ทำให้ค่าเบี่ยงเบนทางสถิติไม่ออกทะเลมากนัก

สร้างไฟล์ CSV

รูปแบบข้อมูลที่เหมาะสมคือ CSV (Comma-Separated Value) ซึ่งเป็น text file ธรรมดา สามารถแก้ไขด้วย text editor ได้สะดวก และประมวลผลในโปรแกรม spreadsheet ได้ทันที

ข้อมูลบนเว็บยังเป็น HTML เราจึงต้องแปลงมาเป็น CSV ซะก่อน การก็อปข้อมูลจากตัวโค้ดจะได้ขยะที่เป็นโค้ด HTML จำนวนมาก เราจึงใช้วิธีก็อปมันจากหน้าเบราว์เซอร์มาดื้อๆ ใส่ใน text editor

ขั้นต่อมาคือปรับฟอร์แมตใน text editor ให้เป็น CSV

ไฟล์ต้นฉบับมีฟอร์แมตดังนี้ (งวดวันที่, 3 ตัวบน, 2 ตัวบน, 2 ตัวล่าง, ช่องว่างคือ tab หรือ \t)

16/05/44	982	82	61
02/05/44	095	95	64

ตรงนี้ใช้ regular expression เข้าช่วย (จริงๆ มันเขียนได้สั้นกว่านี้ แต่ผมมีปัญญาแค่นี้อะ) สั่งใน vi นะครับ

:%s/[0-9]*\/[0-9]*\/[0-9]*\t//
:%s/\t/,/g

ผลลัพธ์ที่ได้ เซฟเป็นไฟล์ result.csv

982,82,61
095,95,64

เขียนโปรแกรม

จริงๆ ได้ CSV แล้วสามารถเอาเข้าไปคิดในโปรแกรม spreadsheet ได้เลย แต่ปัญหาใหญ่อยู่ที่ผมใช้ spreadsheet ไม่เป็นครับ (จริงๆ นะ) เลยต้องใช้วิธีแก้ปัญหาแบบ geekๆ ที่ดูจะเร็วกว่า นั่นก็คือเขียนโปรแกรมคิดเลขนั่นเอง

ภาษาที่ใช้ย่อมเป็น Python เพียงแต่ต้องศึกษาของใหม่นิดหน่อยคือโมดูลในการอ่าน/เขียน CSV แบบมีอารยธรรม ไม่ต้องมานั่ง parse เอง ซึ่งรายละเอียด (อันน้อยนิด) มีอยู่ใน Python Library Reference

การ read CSV เข้ามาไม่มีปัญหาอะไร แต่ตอนเขียนออกกลับเป็น CSV ปรากฎว่าโมดูล csv ของ Python จำเป็นต้องใช้ข้อมูลในรูป list ซ้อน list (ภาษาซีก็คือ array ซ้อน array เป็นตาราง) จึงต้องมี list ชื่อ table มาคอยเก็บ list ย่อยไว้อีกชั้นนึง

งวดนี้วิเคราะห์เฉพาะ 2 ตัวบนกับ 2 ตัวล่างนะครับ แบบ 3 ตัวก็แปลงโปรแกรมนิดเดียว

import csv

list_u = [] # เก็บผลตัวบน
list_d = [] # เก็บผลตัวล่าง
table = []

reader = csv.reader(open("result.csv","rb"))
writer = csv.writer(open("feq.csv","wb"))

for row in reader:
	list_u.append(row[1])
	list_d.append(row[2])

for i in range(100):
        # แก้ปัญหาการเทียบ int 0-9 กับ string 00-09
	if i >= 10:
		label = str(i)
	else:
		label = "0" + str(i)
	table.append((label, list_u.count(label), list_d.count(label)))
for row in table:
	writer.writerow(row)

ไฟล์ผลลัพธ์ที่ได้ (feq.csv) จึงเป็นเสมือนตาราง histogram วัดการกระจายตัวของผลหวย เพียงแต่อยู่ในรูป CSV ตามตัวอย่าง

00,2,2
01,0,0
02,1,1
03,3,2

สร้างกราฟ

เพื่อการนำเสนอที่เข้าใจง่าย จึงต้องเปลี่ยนตารางเป็นกราฟ ผมมีตัวเลือก 2 ทาง คือ เขียนโปรแกรมสร้างกราฟโดยใช้ไลบรารีเพิ่มเติมอย่าง PyChart หรือใช้เครื่องมือกราฟในโปรแกรม spreadsheet (อันนี้ทำเป็น) วิธีแรกดูยุ่งยากไปหน่อย ถึงจะเคยใช้ PyChart สมัยเรียนแต่ลืมไปหมดแล้ว ต้องมานั่งศึกษาใหม่อีก ดังนั้นใช้วิธีที่สองดีกว่า

ว่าแล้วเราก็เปิด OpenOffice.org ขึ้นมา สั่งเปิดไฟล์เป็น .csv มันจะถามเรื่องการแปลงฟอร์แมตนิดหน่อยก็ตอบๆ ไป ผมลองมั่วๆ แต่งกราฟซักพัก ก็ได้ผลออกมาดังนี้

Thailand Lottery Result Analysis (PDF)
(เนื่องจากเป็นเรื่องเงินๆ ทองๆ จึงใช้ลิขสิทธิ์เป็น Creative Commons Attribution-NonCommercial ห้ามนำไปใช้ในเชิงการค้า)

ผลการใบ้หวย

จากกราฟข้างต้น เราได้แนวโน้มผลหวยดังต่อไปนี้

  • เลขที่มีโอกาสถูกมากที่สุด (ทั้งตัวบนตัวล่าง) ในรอบ 6 ปีคือ "64" (ออกรวมกัน 9 ครั้ง)
  • รองลงมาคือ "22" กับ "66" (อย่างละ 7 ครั้ง)
  • สำหรับหวยตัวบน ออกบ่อยสุดคือ "22" (7 ครั้ง) ตัวล่างคือ "64" (5 ครั้ง)
  • หวยตัวล่างมีการกระจายตัวที่สม่ำเสมอกว่าตัวบน
  • เลขที่ไม่เคยออกเลยคือ 01, 46, 81
  • เนื่องจากไม่ได้วิเคราะห์ตาม range จึงประเมินด้วยสายตา พบว่าตัวเลขช่วงที่หวยออกบ่อยที่สุดคือ 40-75 ส่วนช่วงที่ออกน้อยที่สุดคือ 15-40 เอาง่ายๆ ก็แทงเลขเยอะไว้ก่อนเป็นดี
  • เนื่องจากผมไม่ใช่นักสถิติ ข้อมูลอาจมั่วได้ แต่ในภาพรวมผลการออกสลากกินแบ่งประเทศไทยมีการกระจายตัวค่อนข้างสม่ำเสมอ แสดงว่ากองสลากไม่ชอบเลขไหนเป็นพิเศษจนเวอร์ ส่วนจะล็อกเลขหรือเปล่านั้น ข้อมูลไม่เพียงพอจะวิเคราะห์ได้

สุดท้ายก็ต้องย้ำอีกรอบว่า นี่เป็นไอเดียสนุกๆ เอาไว้ฟื้นทักษะด้านโค้ดดิ้งของตัวเองเฉยๆ อย่ายึดถือจริงจังมาก :D

Submitted byplynoion Wed, 06/14/2006 - 22:52

ถ้าถูกจะแบ่งรางวัลให้ เป็นทุนเปิดสำนักพ่อหมอ mk

Submitted bychrison Thu, 06/15/2006 - 00:33

มามั่วอีกคน

สมมุติฐานคือ แต่ละเลข (สองตัว) มีโอกาสออกเท่าๆ กัน คือ 1 ใน 100 = 0.01

ถ้าสองตัวบนกับสองตัวล่างไม่เกี่ยวกัน เราก็มีข้อมูล 149 x 2 = 298 จุด

น่าสนใจตรงที่ถ้าคิดความถี่ที่แต่ละตัวเคยออก แล้วหาค่าเฉลี่ย จะได้ 0.0100 เป๊ะ (ล็อค? :P) มี standard deviation 0.00568

ช่วงความเชื่อมั่น 99% ของค่าความถี่ คือ ±2.58σ หรือ ±0.0147

แสดงว่าตัวไหนที่ออกบ่อยกว่า 0.01+0.0147 = 0.0247 นั้นมันก็ออกบ่อยผิดปกติจริงๆ

0.0247 เท่ากับ 7 ครั้งกว่าๆ จาก 298 ครั้ง

ซึ่งก็มีตัวเดียวที่หลุดไปคือเลข 64 ส่วนที่เหลือผ่านหมดถ้าคิดทดสอบสมมุติฐานแบบนี้

Submitted byLewCPEon Thu, 06/15/2006 - 00:53

ถ้าจำไม่ผิด กองสลากไทยกินค่าหัวคิวสูงมาก มีการจ่ายเงินรางวัลคืนไม่้เกิน 60% ของเงินค่าหวยโดยรวม

งานนี้การใบ้จากสถิติเลยไม่น่าเล่นเท่าใหร่ ถึงเป็น 98% อะไรอย่างนั้น ถ้าหา "เลขเด็ด" ได้ก็ค่อยน่าลอง

Submitted bydeans4jon Thu, 06/15/2006 - 01:13

แนะนำให้ลง in-dept ใน blognone :lol:

Submitted bysugreeon Fri, 06/16/2006 - 09:08

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

Submitted bysugreeon Fri, 06/16/2006 - 09:10

ลืมไปอย่าง น่าจะทำให้กระบวนการทั้งหมดอัตโนมัติได้นะ น่าสนใจ ทำเป็นโอเพ่นซอร์สในงาน CodeFest ท่าจะดี

Submitted bypinkFloyd031on Sat, 06/17/2006 - 07:34

มันเป็นเหตุการณ์อิสระจากกันมิใช่รึ?
แต่ถ้าเป็นผม ผมจะเลือกที่ไม่เคยออกเลยหรือออกน้อยสุด .. เอ๊ะ แต่มันอิสระจากกัน ซื้ออะไรก็ได้นี่หว่า ;)

BTW, ผมแค่คิด แต่มีคนทำจริงด้วยแฮะ, อีกอย่าง 64 เป็นเลขที่ผมซื้อและเกือบซื้อบ่อยสุด .... แต่ ...

h;)

Submitted bypatsonicon Sun, 06/18/2006 - 22:21

กลายเป็นเจ้าพ่อใบ้หวยไปซะแล้ว

อิอิ

อืม จากประสบการณ์แล้ว

สถิติ มักจะมากับความไม่แน่นอนเสมอ

และหวย ก็คือความไม่แน่นอนที่แปรผัน

ถ้าใกล้ๆช่วงฉลอง 60 ปี เลข 60 ก็พุ่งปรี๊ด

อืม ถ้าจะให้ชัวร์ ฝันเอาท่าจะดีกว่า

แต่ 64 นี่ก็น่าลองนะ อิอิ

Submitted byiamnaion Thu, 08/17/2006 - 13:09

น่าคิดๆ ปกติซื้อแบบมั่วๆอ่ะ ถูกเฉย!!!

Submitted byเลิกย้าได้แล้วon Sat, 06/30/2007 - 11:45

ตอนถูกหวยได้เงินหมื่นเลี้ยงเพื้อนหมด
ตอนหวยถูกเพื่อนหายหมดได้เพื่อนระยำ

รู้ยี้เลิกเล่นดีกว่า หวยพาจน ทำการสุจริตดีกว่า