פוקר ודירוגים
שלישי, 09 ביוני 2009כששואלים אותי למה הלכתי ללמוד מתמטיקה ופסיכולוגיה, אני עונה שעשיתי את זה כדי להשתפר בפוקר: שחקן פוקר טוב נדרש לשלב ידע בהסתברות, בסטטיסטיקה, בתורת המשחקים, באמוציות ובפיזיולוגיה שלהם (שפת גוף, למשל), בקבלת החלטות ואולי גם בתורות אישיות.
משחק הפוקר עצמו, על הווריאציות השונות שלו, מסובך להפליא למידול ולחקירה (משחק חוזר, רב-משתתפים, לא דטרמיניסטי ועם אינפורמציה חלקית. שח-מט, למשל, הוא משחק ילדים לעומתו), והתוספת של אלמנטים פסיכולוגיים רק מגדילה את הפער בין כל מודל תיאורטי לבין המציאות. לכן, כמעט בלתי אפשרי לתאר בצורה אנליטית את אסטרטגיות המשחק של שחקנים שונים, ובפרט להשוות ביניהן ולהגיע למסקנה ברורה מי השחקן הטוב יותר.
הפוסט הנוכחי לא יעסוק בדרך הטובה ביותר לשחק פוקר. השאלה שאנסה לענות עליה בסיסית יותר, והיא כיצד בכלל ניתן להשוות בין שחקני פוקר שונים. ספציפית, בהינתן קבוצת שחקני פוקר שמשחקים זה עם זה באופן קבוע, מי השחקן הטוב יותר מביניהם?

כדי שהדיון הנוכחי לא יהיה תיאורטי לחלוטין, אבסס אותו על נתונים אמיתיים. בשנה האחרונה שיחקתי פוקר עם קבוצה פחות-או-יותר קבועה: "גרעין קשה" של בערך 10 חברים, ושחקנים מזדמנים שהצטרפו מדי פעם. שיחקנו טקסס הולדם בתצורת טורניר, כשעלות הכניסה היא 20 ש"ח לאדם (ללא rebuy) וחלוקת הפרסים קבועה בהתאם למספר השחקנים. בטורניר ממוצע השתתפו 6-7 שחקנים, והוא ארך כשעה וחצי. עבור כל משחק שהתרחש (גם לא בנוכחותי), ניהלתי רישום של השחקנים שהשתתפו ושל חלוקת הפרסים ביניהם.
בסה"כ נרשמו 377 משחקים בהם השתתפו 28 שחקנים, עם מחזור כספים של 41,300 ש"ח. מתוכם, אגביל את הדיון למשחקים שהתרחשו ברבעון השלישי של 2008: 71 משחקים בהם השתתפו 12 שחקנים, עם מחזור כספים של 7,720 ש"ח (כיוון שאסטרטגיות משחק בפוקר עשויות להשתנות לאורך זמן, דיון רציני בשאלה מי משחק טוב יותר חייב גם הוא להגביל את עצמו לתקופה באורך סביר). בקבוצת הפוקר שלנו נוהגים להסתכל על תוצאות רבעוניות, ובחרתי להתמקד ברבעון שבו באו לידי ביטוי סוגיות מעניינות לגבי דירוג השחקנים - זה לאו דוקא הרבעון שבו השגתי את התוצאות הטובות ביותר.
הגרף הבא מציג את מספר המשחקים בהם השתתף כל שחקן. כפי שניתן לראות, יש שונות גדולה בין השחקנים (חלק מהשמות בדויים):

לפני שאמשיך בניתוח, נשאלת השאלה האם משחקי הפוקר שלנו חוקיים. האיסור הרלוונטי בחוק הוא סעיף י"ב בחוק העונשין, העוסק ב"משחקים אסורים, הגרלות והימורים". משחק אסור מוגדר שם כ"משחק שבו עשוי אדם לזכות בכסף, בשווה כסף או בטובת הנאה לפי תוצאות המשחק, והתוצאות תלויות בגורל יותר מאשר בהבנה או ביכולת". ניתן להתווכח האם התוצאה בטורניר פוקר אכן תלויה בגורל יותר מאשר בהבנה או ביכולת. באופן אישי, אני מאמין שלאורך זמן התשובה היא שלילית (אמנם, אם המזל היה משחק תפקיד עיקרי בפוקר, ניתן היה לצפות כי ניצחונות בטורנירים יתפלגו בצורה כמעט אחידה בין השחקנים. בפועל, ניתן להראות ברמת בטחון גבוהה ביותר כי לפחות במקרה שלנו זה לא המצב). בכל מקרה, המשחקים שלנו בודאי חוקיים כיוון שהם עומדים בסעיף 230 של החוק ("נסיבות מיוחדות"), המתיר משחקים אם הם א) מכוונים לחוג אנשים מסוים ב) אינם חורגים מגדר שעשוע או בידור ג) אינם נערכים במקום משחקים אסורים.
ובחזרה לנושא העיקרי: מהו מדד טוב לרמת המשחק של כל שחקן בטורניר נתון? מדד אפשרי, למשל, הוא המיקום אליו הגיע בטורניר. אפשרות אחרת היא למדוד בצורה כלשהי את האופן שבו שיחק ידיים ספציפיות. טענתי היא שבהינתן מספיק משחקים, המדד היחיד לטיב המשחק הוא מדד התוצאה, או במילים אחרות: כמות הכסף שהרוויח כל שחקן. מבחינתי, שחקן שמסיים כל טורניר במקום רביעי (ללא פרס), משחק משמעותית רע יותר משחקן שמסיים 90% מהטורנירים במקום האחרון (ללא פרס) ו-10% מהטורנירים במקום הראשון (עם פרס). השחקן הראשון מפסיד כסף תמיד והשחקן השני לא - ובמובן הזה, השחקן השני משחק טוב יותר. העובדה שהשחקן הראשון אולי שיחק ידיים ספציפיות טוב יותר לא רלוונטית לדיון: המטרה היחידה בפוקר היא להרוויח כסף, ובפרט לאורך זמן זהו המדד היחיד לטיב המשחק.
הגרף הבא מציג את כמות הכסף שהרוויח כל שחקן (פרסים שקיבל פחות דמי השתתפות ששילם):

הסתכלות בגרף מעלה שתי נקודות מעניינות. ראשית, נשאלת השאלה האם מי שהרוויח יותר כסף הוא אכן שחקן טוב יותר (שימו לב! אמנם טענתי שמדד הכסף מייצג את טיב המשחק, אבל לא ברור בכלל שדוקא כמות הכסף הכוללת היא המדד הנכון). למשל, שי הרוויח פי 2 מניר, אבל גם שיחק פי 1.5 משחקים ממנו. האמנם שי שחקן טוב יותר? ברור שמדד שלא משקלל את כמות המשחקים ששיחק כל שחקן לא עונה על השאלה הנכונה. שנית, סולם המדידה של המדד הנוכחי אינו מייצג יחס מנה: האם ניתן לומר ששי משחק טוב יותר מניר פי 2? אם כן, פי כמה משחק שי טוב יותר מאלון?
פתרון מתבקש לבעיה הראשונה הוא למדוד את הרווח הממוצע למשחק, במקום את הרווח הכולל. פורמאלית, היינו רוצים לדעת את תוחלת המשתנה המקרי שמייצג את הרווח של כל שחקן ממשחק בודד. אם נניח שהרווח במשחקים שונים מתפלג בצורה זהה ובלתי תלויה, אז ממוצע הרווח במשחקים שראינו הוא אומד טוב לתוחלת הזו.
הגרף הבא מציג את ממוצע הרווח למשחק של כל שחקן (רווח כולל חלקי מספר משחקים):

המדד הזה בודאי רלוונטי יותר לדיון מכמות הכסף הכוללת שהרוויח כל שחקן, אבל יש לו שתי בעיות מהותיות: ראשית, יש הבדל בין שחקן שהפסיד בממוצע 20 שקלים למשחק לאורך שבעה משחקים לבין שחקן שהפסיד בממוצע 20 שקלים למשחק לאורך שבעים משחקים - אבל המדד הנוכחי לא מתחשב בכך. לדוגמא, תומר הפסיד 20 שקלים בממוצע לאורך 2 משחקים, וגאס הפסיד 7.5 שקלים בממוצע לאורך 64 משחקים. כיוון שגם לשחקן מצוין יש סיכוי סביר להפסיד ב-2 המשחקים הראשונים, לא ברור בכלל שגאס צריך להחשב לשחקן טוב יותר. באופן מקביל, גיל הרוויח 30 שקלים בממוצע לאורך 2 משחקים בלבד - האם זה מספיק כדי לומר שהוא השחקן הטוב ביותר? פורמאלית, המדד שלנו הוא סטטיסטי ולכן יש לו שונות. השאלה היא כיצד להתחשב בשונות הזאת במדד הסופי. למשל, היינו יכולים לתת לכל שחקן רווח סמך, כמו בסקרי בחירות: "ארז מרוויח בממוצע למשחק בין 1.2 ל-2.4 שקלים", אבל אז היתה נשאלת השאלה איך משווים בין שני שחקנים - לפי הגבול העליון? לפי הגבול התחתון?
שנית, כדי שבכלל יהיה טעם בהשוואת תוחלות רווח של אנשים שונים, צריך להניח שהם משחקים בתנאים זהים - השאלה היא האם זה מתקיים במקרה הנוכחי. למשל, נניח ששי משחק רק במשחקים שגם אופיר משחק בהם. כיוון שאופיר מרוויח הרבה בממוצע למשחק, ברור שבמובן מסויים שי מרוויח פחות מאשר אם אופיר לא היה משחק (ובאופן כללי, כששחקנים טובים משחקים זה מול זה הם מורידים באופן מעשי את תוחלת הרווח שלהם: מדד הממוצע מוטה לטובת שחקנים שנוטים לשחק מול שחקנים טובים פחות, על חשבון שחקנים שמעדיפים - או נאלצים - לשחק מול שחקנים טובים יותר). זה מקביל לכך שפדרר ימנע מלשחק מול נאדל, ובכל זאת יצליח לעבור אותו בדירוג העולמי כי ניצח המון ילדים בני ארבע.
פתרון חלקי לבעיה האחרונה הוא לבחון בנפרד כל תת קבוצה של שחקנים. למשל, תחילה נתבונן רק במשחקים שנערכו בין אופיר, ארז, חוליאן, גאס ונתן ונחשב את ממוצע הרווח של כל שחקן במשחקים אלה. לאחר מכן נתבונן רק במשחקים שנערכו בין אופיר, ארז, חוליאן, גאס וניר, ונחשב גם שם ממוצעי רווח. בסופו של דבר, כשנסיים לעבור על כל תתי הקבוצות האפשריות, נקבל רשימה ארוכה של ממוצעי רווח לכל שחקן. כל רשימה כזאת ניתן אז לצמצם לערך יחיד ע"י ממוצע משוקלל.
הגרף הבא מציג עבור כל שחקן את מספר תתי הקבוצות שהשתתף במשחקים שלהן. כפי שניתן לראות, שחקנים מסויימים אכן נוטים לשחק בתתי קבוצות "קבועות" יחסית (ניתן להשוות את היחס בין סה"כ המשחקים של כל שחקן לבין מספר תתי הקבוצות ששיחק בהן):

מהו השיקלול הנכון של רשימת הממוצעים שקיבלנו לערך בודד? שיקלול טריוויאלי הוא לתת משקל זהה עבור כל תת קבוצה. שיקלול אפשרי אחר הוא לתת משקל גדול יותר לתתי קבוצות שבהן מספר גדול יותר של שחקנים. למי שמכיר מושגים בסיסיים במשחקים שיתופיים, זה עשוי להשמע מוכר: השיקלול הראשון דומה במהותו לערך בנזף, והשני לערך שפלי.
הגרף הבא מציג את ממוצע הרווח המשוקלל למשחק של כל שחקן, בשיקלול הטריוויאלי. הערך שמוצמד לכל שחקן עונה, פחות או יותר, על השאלה הבאה: אם נגריל תת קבוצה אקראית של שחקנים ונערוך ביניהם משחק, כמה ירוויח בתוחלת כל שחקן?

כפי שניתן לראות, המדד הזה צמצם מאוד את הפער בפסגה (למשל, ההפרש בין שי לאופיר קטן משמעותית פה לעומת מדד הממוצע הרגיל), וגם הסדר היחסי של השחקנים השתנה מעט. בפועל, מדד ממוצע הרווח המשוקלל אכן מצמצם את בעית ה"עדיף לשחק נגד שחקנים חלשים", אך בודאי אינו פותר אותה: כמו קודם, שחקן יכול לקבל דירוג גבוה יותר משחקנים טובים ממנו ע"י כך שימנע לחלוטין מלשחק מולם.
מה שנדרש הוא מדד שבו התגמול לשחקנים שניצחו שחקנים שדורגו גבוה מהם, גדול יותר מאשר התגמול לשחקנים שניצחו שחקנים שדורגו נמוך מהם. במילים אחרות, כששחקן כלשהו מנצח משחק, השינוי בדירוג שלו צריך להיות פונקציה של השחקנים שהוא ניצח, והדירוג שלו צריך לעלות יותר כשהוא מנצח שחקנים שדורגו גבוה ממנו (שוב, הניסיון כאן הוא להמנע מאפקט "פדרר והילדים" שהזכרתי קודם). דוגמא למדד כזה הוא מד הכושר של אלו - הסטנדרט העולמי לדירוג שחקני שחמט - שלמרבה הצער אינו רלוונטי לדירוג שחקני פוקר.
קצת מחשבה הובילה אותי למסקנה שהבעיה מקבילה ל… חיפוש באינטרנט!
בשלב ראשון, נשים לב שאת כל המשחקים שהתרחשו עד כה ניתן לראות כגרף מכוון וממושקל, שבו קודקודים מייצגים שחקנים והמשקלות על הקשתות מייצגות סכומי כסף שעברו משחקן לשחקן. למשל, משחק יחיד של ארבעה שחקנים (דני, אופיר, ארז, ניר) שבו ניר outplayed everyone וזכה בכל הקופה נראה כך (באדיבות Gliffy):

אם נעדכן את הקודקודים והקשתות כך שייצגו את כל המשחקים שנערכו, נקבל בסופו של דבר גרף די גדול ועמוס. בשלב זה, ניתן להפעיל על הגרף את אלגוריתם PageRank של גוגל (או בשמו החדש: PokerRank) ולקבל דירוג לכל שחקן. הדירוגים שמתקבלים הם למעשה ההסתברות הסטציונרית של שרשרת המעבר המרקובית שמייצגת את תנועת הכסף בין האנשים, או במילים אחרות, התשובה לשאלה הבאה: נניח שמישהו זורק שקל לתוך קופת הפרסים של טורניר כלשהו, והמנצח בטורניר מקבל אותו. בכל פעם שיערך משחק אח"כ, יש סיכוי כלשהו שהשקל יחליף ידיים. אחרי שיעבור הרבה זמן (והרבה משחקים נוספים), מה הסיכוי שהשקל יהיה בכיס של כל אחד מהשחקנים?
כדי להבין את הקשר בין הפסקה האחרונה לבין חיפוש באינטרנט, תחשבו על הבעיה הבאה (שהעסיקה פעם את מייסדי גוגל): בפוסט הזה יש מספר קישורים לאתרים חיצוניים, ובכל פעם שאתם נתקלים באחד כזה יש סיכוי מסוים שתלחצו עליו. משם יש סיכוי שתלחצו על לינק לאתר אחר, וחוזר חלילה. PageRank מתאים לכל אתר באינטרנט את הסיכוי שבעוד שעה (נניח), תגלשו דוקא באתר ההוא. כהערת אגב, אלגוריתם PageRank מקבל פרמטר שמגדיר את הסיכוי שתעברו מאתר א' לאתר ב' שלא מקושר אליו (למשל ע"י תקתוק ישיר בשורת הכתובת של הדפדפן). במקרה שלנו, ניתן לתת לפרמטר הזה מובן של "כמה פוקר מבוסס על מזל לעומת יכולת". אני בחרתי להריץ את האלגוריתם עם 80-20 לטובת יכולת (ככל שמניחים מעורבות חזקה יותר של מזל, ההפרשים בין דירוגי האנשים מצטמצמים, אך הסדר ביניהם לא משתנה).
הגרף הבא מציג את ערכי ה-PokerRank של השחקנים השונים:

למדד ה-PokerRank יש שני יתרונות בולטים: ראשית, לראשונה קיבלנו מדד שמייצג סולם יחס. יש סיכוי של 0.14 שהשקל יסיים בידיים של ארז, וסיכוי של 0.07 שהשקל יסיים בידיים של ניר - ובמובן הזה, ארז אכן טוב מניר פי 2. שנית, המדד הזה אכן מתגמל את מי שמשחק (ומנצח) מול שחקנים שמדורגים בו גבוה - בדיוק כמו בגלישה באינטרנט, שם יש סיכוי גבוה יותר שיגיעו אליכם גולשים אם קיבלתם לינק מ-ynet מאשר מהבלוג הנוכחי.
מצד שני, למדד הזה יש גם חסרון משמעותי: ככל שתשחקו יותר, הדירוג שלכם יעלה. ואכן, הסיכוי שהשקל יסיים בידיו של שחקן מעולה שמנצח 90% מהטורנירים אבל משחק לעיתים רחוקות מאוד, קטן מהסיכוי שיסיים בידיו של שחקן ממוצע שמשחק תמיד. זאת בעיה קשה, כי בסופו של דבר אנחנו רוצים לדעת מי משחק טוב יותר, ולא רק מי משחק יותר. בכל זאת, מדד ה-PokerRank מקיים הרבה מהתכונות שהיינו מצפים למצוא במדד האידיאלי.
המדד האחרון שאציג הוא אולי המסובך ביותר להבנה, אבל לטעמי המוצלח ביותר.
הסכמנו כבר ששחקן טוב הוא פשוט שחקן שמרוויח כסף, או במילים אחרות: שחקן שתוחלת הרווח שלו למשחק חיובית. עבור כל שחקן ספציפי, ניתן לשאול עד כמה סביר שהוא אכן שחקן טוב בהינתן מדגם המשחקים שהשתתף בהם. לחילופין, ניתן לשאול את השאלה הבאה: נניח שלשחקן קופה התחלתית של 1000 ש"ח. בכל פעם שהשחקן משתתף במשחק הוא משלם את דמי הכניסה מהקופה שלו, וכל פרס שיזכה בו יכנס בחזרה לקופה. מה הסיכוי שהשחקן ישרוד לנצח, ז"א לעולם לא "יהרס"?
השאלה הזו עמוקה יותר ממה שנראה. ראשית, שימו לב שאם לשחקן יש תוחלת רווח שלילית, סיכוי ההישרדות שלו הוא ממש 0 (זאת תוצאה ישירה של החוק החזק של המספרים הגדולים). לעומת זאת, אם לשחקן יש תוחלת רווח חיובית (אבל הוא עדין יכול להפסיד מדי פעם), סיכוי ההישרדות שלו גדול מ-0, אבל קטן ממש מ-1. הסיבה היא שהשחקן עשוי להפסיד רצף של משחקים שיחסל את הקופה ההתחלתית שלו. אולי מדובר בסיכוי נמוך מאוד, אבל האפשרות קיימת.
בפועל, כמובן, תוחלת הרווח של השחקן (ומן הסתם גם התפלגות הרווח שלו למשחק) אינה ידועה לנו. מה שכן, יש לנו מדגם של משחקים שהשחקן השתתף בהם, ובעזרתו ניתן לאמוד אותה. Bill Chen פיתח מודל סטטיסטי שמאפשר לנו להעריך את סיכוי ההישרדות של שחקן תחת מספר הנחות פשוטות (בעיקר הנחות נורמאליות, שמתקיימות עבור מדגמים גדולים ממשפט הגבול המרכזי) ע"י חישוב של כמה אינטגרלים. קוראים שמתעניינים בפרטים מופנים לפרקים 22-23 בספר של צ'ן שמוזכר בסוף הפוסט.
הגרף הבא מציג את סיכוי ההישרדות של השחקנים השונים:

מה שהופך את המדד הזה למוצלח כל כך בעיני, הוא שהוא משקלל לתוכו גם את ממוצע הרווח למשחק, גם את שונות הרווח של השחקן וגם את מספר המשחקים ששיחק. מדד ההישרדות מתגמל שחקנים עם ממוצע רווח למשחק גבוה ושונות רווח למשחק נמוכה (ז"א שחקנים טובים ויציבים), ומעניש שחקנים עם ממוצע רווח למשחק נמוך ושונות רווח למשחק גבוהה (שחקנים רעים ולא יציבים). מספר המשחקים ששיחקת משמש כמגבר, ז"א יותר משחקים יגדילו את התגמול / העונש שקיבלת. בנוסף, בדומה למדד ה-PokerRank גם מדד ההישרדות מייצג סולם יחס.
אז לסיכום, מה היה לנו פה? ראינו מדדים שונים לדירוג שחקני פוקר: ממדדים סטטיסטיים פשוטים כמו ממוצע למשחק ועד מדדים מסובכים שמקורם בתיאוריה של תהליכים סטוכסטיים. בשורה התחתונה, אין תשובה חד משמעית לשאלה באיזה מדד להשתמש. כל מדד מספר לנו אינפורמציה מעט שונה על השחקנים, וכל קורא מוזמן לבחור את המדד שנראה לו ביותר. מהסתכלות על תקופות שונות של המשחקים שלנו, מדד ההישרדות הוא הקרוב ביותר לקונספט שיש לי לגבי שחקנים טובים.
אגב, כיוון שהחישובים של חלק מהמדדים כבדים יחסית (ספציפית PokerRank ומדד ההישרדות), הסטטיסטיקות והדירוגים בקבוצה שלנו כבר מזמן לא מנוהלים בקובץ Excel פשוט. היום כל העסק מנוהל ונגיש דרך אפליקצית web ייעודית שכתבתי ב-Java, ומחובר לפייסבוק דרך Facebook Connect. בנוסף למדדים שהזכרתי למעלה, האפליקציה גם מספרת לך מי הנמסיס שלך (השחקן שנוכחותו במשחק מקטינה את הרווח הממוצע שלך בצורה המשמעותית ביותר) ומי הסיידקיק שלך (השחקן שנוכחותו במשחק מגדילה את הרווח הממוצע שלך בצורה המשמעותית ביותר). אולי מתישהו אפתח אותה לשימוש גם ע"י קבוצות פוקר אחרות. ואולי לא :)
ולסיום, הנה רשימת קריאה מומלצת במיוחד למי שבכל זאת רוצה לשפר את משחק הפוקר שלו:
- Every Hand Revealed / Gus Hansen: האסטרטגיה ומערכת השיקולים של שחקן פוקר מקצועי נחשפת דרך תיעוד מלא של כל הידיים ששיחק באליפות אוסטרליה 2007.
- The Mathematics of Poker / Bill Chen: ניתוח מתמטי מבריק (וטכני מאוד) של פוקר מנקודת מבט של תורת המשחקים, במטרה לזהות מאפיינים של אסטרטגיות אופטימליות.
- Read 'Em and Reap / Joe Navarro: שפת גוף בהקשרי פוקר, בהתבסס על תיאורית המוח המשולש מפסיכולוגיה. אני מצאתי את הספר יעיל מאוד מבחינה פרקטית.







