מתודות עבודה

חייבים לנתח את כולם – פוקימון בראי הדאטה!

By אוקטובר 12, 2017 No Comments

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

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

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

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

סאנדסלאש - פוקימון

רוצים *לחפור* בדאטה קצת?


הערות חשובות –

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

לא רוצים לגלול? הקליקו כאן לאמ;לק שבסוף הפוסט.

לא רוצים לגלול? הקליקו כאן כאן לחוקים שבסוף הפוסט.


אוקיי, אז בזמן שחיפשתי מאגר מידע לעבוד איתו, משהו עם אוריינטציה עסקית (עניין של עצלנות – לא היה  לי כוח לקחת נתונים אמיתיים ולהוריד מהם פרטים מזהים של העסק), אז נכנסתי ל-Kaggle.com, הורדתי את מאגר המידע הזה, המכיל מידע על כל הפוקימונים בנקודת ההתחלה הממוצעת שלהם. 

מתוך מידע המטא על העמודות אנחנו למדים כמה דברים:

  1. ישנן 800 רשומות
  2. אין חוסרי מידע
  3. ישנם 250 פוקימונים להם יש התפתחות שמצויינת על ידי רמת הפוקימון

דבר ראשון שאנחנו רואים זה שחסר נתונים על האבולוציות של הפוקימונים, מי שיצא לו וודאי יודע שבלבזאור מתפתח ברמה 16, אבל אודיש ברמה 21, אז אנחנו צריכים למצוא את המידע הזה.

(הערכת עריכה – בסוף לא עשיתי עם המידע הזה כלום, כי הבנתי שאני לא מפסיק לכתוב – אבל העליתי את הקובץ ל-Kaggle לרווחת כולם.)

באתר הזה מצאתי את הטבלה ובעזרת requests ו-pandas שאבתי את מאגר המידע אליי ועכשיו, כל מה שנותר הוא לחבר את המידע – איך? מה הדרך הנכונה ביותר?

אז במקרה הזה בחרתי לעשות את זה עם אקסל ולהשתמש בוילוקאפ, ככה שיש לנו מאגר חדש שמכיל את כל העמודות ועוד שתיים – רמת ההתפתחות ותנאים מיוחדים, אם יש.

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

השאלות עליהן בחרתי לענות בנוגע למאגר הפוקימונים

  1. איזה מהדורות, בממוצע, הכי חזק, הכי מהיר, מוכן הכי טוב?
  2. מה סוג הפרטים הנפוץ ביותר? מה השילוב הנפוץ ביותר?
  3. בהינתן נתונים של פוקימון, האם נוכל לחזות את סוג הפוקימון?
  4. מבלי לבצע תוספות מיוחדות או שינויים מרחיקים במאגר המידע הקיים – בהינתן הנתונים של פוקימון X, האם נוכל לחזות אם הוא פוקימון אגדי?

נתונים סטטיסטיים על הדורות

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

השוואת התפלגויות סכימת היכולות של פוקימונים לפי דורות בחלוקה לפי אגדי\רגיל

מהסתכלות קלילה על הגרף אנחנו יכולים לראות שבאמת אין ממש 'הוגנות' בהשוואה בין פוקמונים רגילים או לא רגילים, או לחילופין, שאנחנו יכולים להשוות בין הדורות בחתך של כל הפוקימונים, רק האגדתיים או רק הלא-אגדתיים.


לפני שנתחיל לעבוד על המידע, חשוב קודם כל להסתכל עליו ברמת המטא – נסתכל על הנתונים הכלליים.

סך הכל אנחנו רואים 735 פוקימונים (ואני עוד זוכר שהיו רק 151), מתוך ההיכרות שלנו עם הנתונים, אנחנו רואים שאין ערכים חסרים (ופה יש דגש סמוי אבל חשוב – תכירו את הנתונים שלכם), אנחנו רואים שיש 374 פוקימונים שנופלים תחת הקטגוריה של שני סוגים) ואנחנו רואים שיש 250 פוקימונים סך הכל שהם ברי התפתחות.

חוק #1 – תכירו את הנתונים שלכם ככל האפשר, אתם לא מחשב, אתם צריכים לתת משמעות אחר כך לכל הניתוחים.

חוק #2 – לפני שאתם ניגשים לשאלות המחקר שלכם, שחקו קצת עם הנתונים, חפשו דברים שיכולים להיות נכונים, או דברים שיכולים להיות מאוד לא נכונים.

שאלה ראשונה – איזה מהדורות, בממוצע, הכי חזק, הכי מהיר, מוכן הכי טוב?

כיוון שאנחנו מדברים על השוואה בין קטגוריות, אנחנו נבחר בגרפים ייעודיים, במקרה הזה – גרף קופסאות ובו ציר ה-X שלנו יהיה דור הפוקימונים, ציר ה-Y כבר יכיל את המדד העיקרי שנרצה לבחון.

התקפה – אנחנו רואים שהממוצעים יחסית זהים בין הדורות (מינימום – 70.45, מקסימום – 79.62), ומעט חריגים באופן יחסי.

גרף קופסאות של נתוני התקפות של פוקימונים לפי דורות

פיקאצ'ו – מכת חשמל!

הגנה – אותו הסיפור, ממוצעים יחסית זהים, אבל הרבה יותר חריגים, בייחוד בדור השלישי (אולי שווה לבדוק מי הפוקימונים המוגנים ביותר בדורות ולשחק עם זה קצת, אולי לא).

גרף קופסאות של נתוני הגנות של פוקימונים לפי דורות

מטפוד – התקשח!

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

מהירות – אותו הדבר, פחות מעניין.

גרף קופסאות של נתוני המהירות של פוקימונים לפי דורות

סטארמי – סוויפט!


מה יכולה להיות הבעיה בנתונים האלו?


כשאנחנו בודקים את הנושא הזה, אנחנו בעצם מערבבים המון דברים – אנחנו בדקנו פה פשוט את הממוצע של כל הפוקימונים לפי הדורות (על בעיות שקשורות בממוצעים) – אבל אנחנו יודעים שיש פוקימונים שמתפתחים ובעצם אנחנו מקבלים מידע קצת שקרי, כי אנחנו מכלילים את כולם. רק כדי לדחוף את הנקודה הזאת עד הסוף – בחישוב – יש לנו סקווירטל, וורטרטל ובלאסטויס – ושלושתם כאילו נתפסו ברמה 5 – נכנסים לחישוב הזה.

למה אני בכל זאת מציג את זה?

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

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

גרף קופסאות המציג סכימת יכולות פוקימונים מכל הדורות לפי סוג ראשי

סכימת יכולות פוקימונים לפי סוג

 

טוב, אנחנו רואים ששווה להיות דרקון, ולאחר מכן, פוקימוני פלדה מכילים את הסכום המשתנים הגדול ביותר.

מגניב.

חוק #3 – לא רק התוצאה חשובה, הרבה פעמים – היא מאוד זניחה בחשיבותה – הדרך חייבת להיות מדויקת ונכונה.

חוק #4 – אם משווים בין אוכלוסיות – הכל חייב להיות זהה ביניהן – אחרת ההשוואה לא ברת תוקף.

שאלה שנייה -איזה מסוג הפרטים הוא הנפוץ ביותר?

טוב, פייר?

זאת שאלה פשוטה, ואולי קצת עשיתי לעצמי הנחות – בשביל לענות על השאלה, בחרתי ללכת על האופציה של שימוש באקסל, רידוד ערכים כפולים ופונקציית countifs (כי יש לנו שני קריטריונים), אבל מה היה קורה אם לא היו לי 800~ רשומות?

מה אם אלה היו חצי מליון רשומות?

איך היינו עושים את זה?

שוב, כמו בהרבה מהמקרים, אנחנו נתקעים עם השאלה של איך הכי נכון לעשות את זה – ושוב – אנחנו יכולים להשתמש באקסל, בפייתון, ב-SQL או בספירה ידנית – הכי חשוב לזכור שאין דרך אחת, ועבור כל בעיה יש את הדרך הטובה ביותר המתאימה לה.

לגוף השאלה –

Type 1 Type 2 count
Normal 61
Water 59
Psychic 38
Grass 33
Fire 28


הנה טבלת חום שאמורה לתת תחושה קצת יותר טובה.

מפת חום המתארת את שילובי הפוקימונים עבור כל הדורות

שילובי פוקימונים במפת חום עבור כל הדורות

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

חוק #5 – אין כזה דבר דרך אחת – יש פתרון אחד, וגם זה לא תמיד הכרחי. (לקריאה בהרחבה על הדרכים לפתרון)

שאלה שלישית בהינתן נתונים של פוקימון, האם נוכל לחזות את סוג הפוקימון?

 

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

(עקרונית, במקרה כזה – אנחנו יכולים במסגרת למידה חישובית שקשורה לקלסיפיקציה לנסות כמה שיטות – רגרסיה לוגיסטית, עצי החלטה, KNN ועוד כמה, אבל אנחנו לא מתעסקים בזה כאן לרמה הזאת, עכשיו בכל אופן)

ראינו שיש הבדלים בין הסוגים בצורה מצרפית, אבל האם זה מספיק בשביל לנסות לנבא?

אוקיי, אז בשביל עבוד עם רגרסיה לוגיסטית על המידע שלנו – אנחנו צריכים לחלק אותו למידע ללמידה ומידע לבחינה – נעשה את זה עם train_test_split ונזכור שמה שאנחנו רוצים לעשות הוא לבדוק האם ניתן לחזות את סוג הפוקימון (בשביל הפרוטוקול, הפשטות והסיכוי שזה כן יצליח בכל זאת) וליתר דיוק – את הסוג העיקרי של הפוקימון.

הסיכום הוא מצער למדי, לא הצלחנו להגיע למשהו שהוא קרוב אפילו לחיזוי מדויק, והמודל עומד על ציון של 0.33.

 

חוק #7  -לא תמיד תוכלו לקבל תוצאות שתרצו, הרבה פעמים תצטרכו להתאכזב ולהגיד – הנתונים לא אומרים שום דבר.

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

שאלה רביעית בהינתן נתונים של פוקימון, האם נוכל לחזות אם הוא פוקימון אגדי?

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

אם נחזור לגרף למעלה, אנחנו יכולים לראות את התפלגות סך הנתונים של פוקימונים אגדתיים לעומת, בכחול, את ההתפלגות של כל הפוקימונים שהם לא אגדתיים (וזה כולל כל מני יצורים לא ברורים שהם התפתחות רביעית – כמו צ'אריזארד Y או פוקימוני מגה -אז ברור לנו שההשוואה הזאת לא הייתה הוגנת והייתה יכולה לעוות את הנתונים (ורק תחשבו אם היו אומרים לקאטרפי המסכן שממוצע סכימת כלל הנתונים שלו צריך להיות 426~ (והוא, מסכן שכמותו הוא רק 195..)

אנחנו ננסה לבצע רגרסיה לוגיסטית שוב על המאגר, אולי נצליח לקבל תוצאות טובות יותר.

עכשיו פשוט החלפנו את המאגר, נשארנו עם כל עמודות היכולות (למעט סך הכל – כיוון שזאת פשוט עמודת סכימה, אז אני לא רוצה לעוות את הנתונים על ידי שאני סופר את אותו הנתון פעמיים).

הפעם המודל הלוגיסטי הראה לנו דיוק של 96% בקביעה שפוקימון הוא לא אגדי ודיוק של 83% שפוקימון הוא כן אגדי.

סביר והגיוני להניח, שאם הייתי מוריד את כל הפוקימונים המיוחדים שציינו מקודם, רוב הסיכויים שהנותנים האלו היו גבוהים יותר – התפתחויות רביעיות הן א-נומליות עבור המדידה שלנו.

חוק #8 – אין דבר מתוק יותר מהצלחה.

זה מסכם את הפוסט הזה, שיצא הרבה יותר ארוך ממה שחשבתי שיצא – בכל מקרה, אם הגעתם לכאן מלמעלה –

הנה האמ;לק:

  • סך הכל ישנם 800 פוקימונים.
  • עשינו החרגה של כל הפוקימונים האגדתיים (כאלו שזאת ההגדרה שלהם – לא כאלו חזקים במיוחד) – נותרו 735 פוקימונים.
  • מתוך הפוקימונים הללו – 250 מתוכם הם בעלי התפתחות כלשהי (הפעם ללא המוקיונים שמוגדרים כמגה או התפתחויות רביעיות).
  • בין הדורות לא נמצאו פערים משמעותיים, אז בטוח לומר שברמה העקרונית, כל הדורות שווים בעצמתם הכללית (הדיסקליימרים – ברמה חמש, ללא תלות ברמת המאמן, ללא קשר לתנאי הסביבה, ללא קשר לאופי הפוקימון וכן הלאה וכן הלאה)
  • הפוקימונים הכי חזקים, מצרפית – הם דרקונים ופלדה.
  • הפוקימונים הכי חלשים, מצרפית – הם חרקים ותעופה (אבל את זה כבר ידענו, תודה רבה לך פידג'י מעפאן)
  • סוגי הפוקימונים הכי נפוצים הם כאלו ללא סוג משני, והסוג הנפוץ ביותר הוא פשוט נורמלי.
  • השילוב הנפוץ ביותר הוא של נורמלי ותעופה (ולאחריו עשב ורעל)
  • בנתונים הקיימים וללא מאמץ מיוחד, לא ניתן לחזות בהצלחה את סוג הפוקימון ברגרסיה לוגיסטית.
  • בנתונים הקיימים וללא מאמץ מיוחד, ניתן לחזות בהצלחה האם פוקימון מסוים הוא אגדי או לא.


ריכוז החוקים שניתן היה ללמוד מהפוסט הזה:

  1. תכירו את הנתונים שלכם ככל האפשר, אתם לא מחשב, אתם צריכים לתת משמעות אחר כך לכל הניתוחים.
  2. לפני שאתם ניגשים לשאלות המחקר שלכם, שחקו קצת עם הנתונים, חפשו דברים שיכולים
    להיות נכונים, או דברים שיכולים להיות מאוד לא נכונים.
  3. לא רק התוצאה חשובה, הרבה פעמים – היא מאוד זניחה בחשיבותה – הדרך חייבת להיות מדויקת ונכונה.
  4. אם משווים בין אוכלוסיות – הכל חייב להיות זהה ביניהן – אחרת ההשוואה לא ברת תוקף.
  5. אין כזה דבר דרך אחת – יש פתרון אחד, וגם זה לא תמיד הכרחי. (לקריאה בהרחבה על הדרכים לפתרון)
  6. לא תמיד הנתונים יהיו סקסיים ומגניבים, הרבה מהפעמים הנתונים ישקפו את המציאות בצורה הכי צפויה ומעיקה שיכולה להיות.
  7. לא תמיד תוכלו לקבל תוצאות שתרצו, הרבה פעמים תצטרכו להתאכזב ולהגיד – הנתונים לא אומרים שום דבר.
  8. אין דבר מתוק יותר מהצלחה.

לסיכום, אם תמצאו מאמן פוקימונים, תוכלו לשלוף לו איזה מפת חום ולהגיד לו שאם הוא לא מוצא איזה פוקימון אגדי – שינסה למצוא איזה GroudonPrimal Groudon או איך שלא קוראים לזה – כי הוא אמור להיות די חזק.