SlideShare a Scribd company logo
Hacking Kaggle - Click
Prediction
Gidi Shperber - Data Science consultant @Shibumi
Click prediction competitions
Criteo - 2014
Avazo - 2015
Outbrain - 2016-2017
Intro - Kaggle
Intro - why and how to get started
Kaggle is the best place to learn about data science and machine learnin ‫ת‬but
how should you start?
1. Learn by doing
2. Learn from community
3. Focus on pipeline
4. Scoring - the best feedback
The outbrain competition
click prediciton = match User and Ad,
predict % of click
equivalent to user and item, user and
content, user and post (facebook)
Presentation based on:
My experience
2nd best solution
Outbrain competition - the data
80 Million ads (rows) spread on 20 Million Displays
Outbrain competition - the goal
the goal is to rank ads inside every display, by chance of being clicked
Competition scoring
sample submission - 0.48
naive script - 0.63 [CTR per ad]
winner - 0.7
competition effective range - 0.63 to 0.7
Mean Average percision - 0 to 1
Outbrain competition - Additional Data
“side” features:
- “from” page
- “to” page
- document topics (encoded)
- demographic data
- publisher data
Data analysis
ads in a single displyads # of appearences
Data analysis - Things To Notice
- train and test
proportion by day
- validation should be
done carefuly
train validation
The model(s)
Though winners tried many models, FFM model
scored far better than others
https://github.com/guestwalk/libffm/tree/v114
2nd place result: 0.7006
single model (FFM) best result: 0.7003
collabarative filtering
?
collabarative filtering - basic approach for user Item problems
user=bob
item=1
predicted
score=3.5
Factorization Machines
FM allows adding side features
Factorization Machines
Factorization Machines illustration
= P(click)
# of weights: #users+#items+#of feauters
FFM - Field aware Factorizaion machines
FM
FFM
# of weights: (#users+#items+#of feauters) X # of fields
more weights = more expressivenes
https://www.kaggle.com/c/avazu-ctr-prediction/discussion/12608#69677v
Tricks - Leaks
Leak - training data that may hint test predictions unintentionaly
page views:
test set:
Feature engineering
user - geo
time (day, hour)
different aggregations
document subject
key feature:
competing ads
Oubrain - wokring with big data
Basic
Data
Parsing
model-ready
data parsing
training
model
Oubrain - wokring with big data
Parsed data Lib SVM format
1. Data munging
2. Encoding
Ultimate speeding - simple python and pypy
parsing with time
pandas 30 minutes
dictreader() 10 minutes
dictreader()+pypy 3 minute
data preperation:
encoding
● FFM - model size = model weights = #features X #fields
● 14,794,184 - model will have at least 14M X 4 rows!
speeding up the model
● How to encode?
○ sklearn label encoding - >1M values, really slow
○ hashing
○ modulu hashing
Speeding Up the parsing
training time in minutes [10% of training set]
Questions?

More Related Content

PPT
APEX MashUp
PDF
Click prediction: kaggle competitions vs real life
PPT
kaggle_meet_up
PPTX
Kaggle Days Milan - March 2019
PDF
Data Wrangling For Kaggle Data Science Competitions
PDF
Beat the Benchmark.
PDF
Beat the Benchmark.
PDF
Kaggle presentation
APEX MashUp
Click prediction: kaggle competitions vs real life
kaggle_meet_up
Kaggle Days Milan - March 2019
Data Wrangling For Kaggle Data Science Competitions
Beat the Benchmark.
Beat the Benchmark.
Kaggle presentation

Similar to Hacking kaggle click prediction (20)

PDF
A Kaggle Talk
PDF
Web Traffic Time Series Forecasting
PDF
Outbrain Click Prediction
PDF
Play with Kaggle
PDF
OutbrainFinalReport
PDF
R, Data Wrangling & Kaggle Data Science Competitions
PDF
The Hitchhiker’s Guide to Kaggle
PDF
Winning Data Science Competitions
PDF
Data Science Competition
PDF
Mastering Machine Learning with Competitions
PPTX
Kaggle Gold Medal Case Study
PDF
Hacking Predictive Modeling - RoadSec 2018
PDF
Before Kaggle
PDF
Before Kaggle : from a business goal to a Machine Learning problem
PDF
Tips for data science competitions
PDF
Zendesk and NLP
PPTX
How to get into Kaggle? by Philipp Singer and Dmitry Gordeev
PDF
My First Attempt on Kaggle - Higgs Machine Learning Challenge: 755st and Proud!
PPTX
What does it take to win the Kaggle/Yandex competition
PPTX
Starting data science with kaggle.com
A Kaggle Talk
Web Traffic Time Series Forecasting
Outbrain Click Prediction
Play with Kaggle
OutbrainFinalReport
R, Data Wrangling & Kaggle Data Science Competitions
The Hitchhiker’s Guide to Kaggle
Winning Data Science Competitions
Data Science Competition
Mastering Machine Learning with Competitions
Kaggle Gold Medal Case Study
Hacking Predictive Modeling - RoadSec 2018
Before Kaggle
Before Kaggle : from a business goal to a Machine Learning problem
Tips for data science competitions
Zendesk and NLP
How to get into Kaggle? by Philipp Singer and Dmitry Gordeev
My First Attempt on Kaggle - Higgs Machine Learning Challenge: 755st and Proud!
What does it take to win the Kaggle/Yandex competition
Starting data science with kaggle.com

Recently uploaded (20)

PPTX
MET 305 2019 SCHEME MODULE 2 COMPLETE.pptx
PPTX
Recipes for Real Time Voice AI WebRTC, SLMs and Open Source Software.pptx
PDF
composite construction of structures.pdf
PPT
Mechanical Engineering MATERIALS Selection
PPT
Project quality management in manufacturing
PPTX
M Tech Sem 1 Civil Engineering Environmental Sciences.pptx
PPTX
Construction Project Organization Group 2.pptx
PPTX
bas. eng. economics group 4 presentation 1.pptx
PPTX
FINAL REVIEW FOR COPD DIANOSIS FOR PULMONARY DISEASE.pptx
PDF
Digital Logic Computer Design lecture notes
DOCX
ASol_English-Language-Literature-Set-1-27-02-2023-converted.docx
PDF
BMEC211 - INTRODUCTION TO MECHATRONICS-1.pdf
PPTX
Strings in CPP - Strings in C++ are sequences of characters used to store and...
PDF
Embodied AI: Ushering in the Next Era of Intelligent Systems
PDF
Structs to JSON How Go Powers REST APIs.pdf
PPTX
Infosys Presentation by1.Riyan Bagwan 2.Samadhan Naiknavare 3.Gaurav Shinde 4...
PDF
Evaluating the Democratization of the Turkish Armed Forces from a Normative P...
PDF
PRIZ Academy - 9 Windows Thinking Where to Invest Today to Win Tomorrow.pdf
PDF
Well-logging-methods_new................
PDF
PPT on Performance Review to get promotions
MET 305 2019 SCHEME MODULE 2 COMPLETE.pptx
Recipes for Real Time Voice AI WebRTC, SLMs and Open Source Software.pptx
composite construction of structures.pdf
Mechanical Engineering MATERIALS Selection
Project quality management in manufacturing
M Tech Sem 1 Civil Engineering Environmental Sciences.pptx
Construction Project Organization Group 2.pptx
bas. eng. economics group 4 presentation 1.pptx
FINAL REVIEW FOR COPD DIANOSIS FOR PULMONARY DISEASE.pptx
Digital Logic Computer Design lecture notes
ASol_English-Language-Literature-Set-1-27-02-2023-converted.docx
BMEC211 - INTRODUCTION TO MECHATRONICS-1.pdf
Strings in CPP - Strings in C++ are sequences of characters used to store and...
Embodied AI: Ushering in the Next Era of Intelligent Systems
Structs to JSON How Go Powers REST APIs.pdf
Infosys Presentation by1.Riyan Bagwan 2.Samadhan Naiknavare 3.Gaurav Shinde 4...
Evaluating the Democratization of the Turkish Armed Forces from a Normative P...
PRIZ Academy - 9 Windows Thinking Where to Invest Today to Win Tomorrow.pdf
Well-logging-methods_new................
PPT on Performance Review to get promotions

Hacking kaggle click prediction

Editor's Notes

  • #3: אדבר היום על תחרויות click prediction תחרויות ה קליקים הן פחות נפוצות ב Kaggle מתחרויות של תמונות ן\או רפואה נניח. סיבות לכך יכולות להיות שהתחום פחות סקסי, ושחברות מעדיפות לשמור את הדאטה הזה לעצמן (היה דיון על כך לא מזמן בקבוצת ה deep learning בפייסבוק) אבל זאת גם הסיבה שהערך של התחרויות האלה עצום. כל מי שעובד בחברה שמנתחת לקוחות באיזושהי צורה יכול להפיק ערך פרקטי ומהיר מאוד מהתחרויות - בין אם באלגוריתמים, ובין אם בטכניקות וטריקים. האלגוריתם(ים) הזוכים בתחרויות האלה, הם דוגמה למה שאמרתי קודם - אלגוריתם ה FFM נחשב אלגוריתם ה state of the art בתחום, והוא פותח בתחרות של criteo, ומאז פותח ושופר בכל אחת מהתחרויות. יש תחרות כזאת בערך פעם בשנה, כשהאחרונה הייתה בתחילת השנה הזאת, בחסות אאוטבריין. זאת הייתה גם התחרות הראשונה שהשקעתי בה באמת יש לציין גם שהאלגוריתמים כאן רלוונטיים מאוד לתחום ההמלצות אציין גם שזאת התחרות הראשונה שהשתתפתי בה בצורה רצינית (יחסית)
  • #4: מה זה Kaggle בשבילי [דיברו על זה לפני, אז אני אוסיף טיפה] ] קאגל לדעתי הוא underrated. אז נכון, הוא נקנה ע"י גוגל, ונמצא בעליה וכשמישהו אומר שהוא רוצה להיכנס לתחום אז שולחים אותו ל kaggle, אבל יש עדיין איזה אווירת זחיחות כשמקצועני machine learning מדברים על kaggle. זה נע מ"הלוואי שהיה לי זמן לעשות תחרויות ב kaggle", ועד "kaggle זה לא רציני יש הרבה בעיות בדאטה, יש דברים שאי אפשר ללמוד שם". אז נכון, לא הכל אפשר ללמוד ב kaggle, בעיקר בגלל האופי הסטטי והסלקטיבי של הבעיות שם, ונכון יש שם בעיות בדאטה (אבל איפה אין) אז לדעתי kaggle הוא המקום הכי טוב ללמוד data science , ובנוסף, רבים מהמודלים המתקדמים ביותר מקורם בתחרות kaggl, לדוגמא מודל ה FFM עליו אנחנו הולכים לדבר היום. ג'רמי הווארד אמר שכמעט בכל תחרות, הכמה פתרונות הראשונים הם פריצת דרך ברמת SOTA 4. ויותר ויותר מאמרים מתייחסים ל kaggle כאל benchmark ( אני מצרף כאן מאמר שסוקר את פעילות ה deep learning בתחום הרפואה, שמזכיר את kaggle בכל שורה שניה בערך) https://arxiv.org/abs/1702.05747 קאגל זה טוב - הרבה מהתחרויות שם תורמות למטרות חיוביות כגון גילוי סרטן ושמירה על הטבע וכל זה לפני שדיברתי על התכנית הגרנדיוזית של kaggle להפוך לגורם מרכזי בתחום ה דאטהבייסים, ומחשוב ענן בעיה חדשה בכל פעם - לרובינו אין את זה בעבודה. עובדים על אותו דבר במשך שנים. ב kaggle יש כמעט כל שבוע תחרות חדשה, ואני מאמין שכשמתעסקים עם משהו חדש, לומדים הכי הרבה.
  • #5: אז איך מתקדמים ב Kaggle? דבר ראשון, עושים תחרויות. פשוט. מורידים את הדאטה, בונים מודל (גם הכי בסיסי שיש) ומגישים. ומשם מנסים להתקדם. כל אחד עם יכולת תכנות בסיסית ומטה יכול לעשות את זה. להיכנס לפורום - יש הרבה אנשים ללמוד מהם, חלקם כותבים בפורום, ואל חלקם אפשר לפנות באופן אישי דגש על pipeline. אין כמו kaggle, כדי להבין שאתם יכולים להשיג יותר - דברים שעשיתי (כי נאלצתי) לעשות ב kaggle ביום או יומיים, היה לוקח לי בעבודה שבוע- שבועיים. kaggle הכריח אותי לעבוד יעיל וחכם. בkaggle אלגוריתם ינקד אתכם בצורה קרה. אין כמעט, אין בערך*, יש ציון אחד, וזה נותן לכם מדד מאוד אובייקטיבי לדעת אם אתם משתפרים או לא
  • #6: אז כאמור במצגת זו אתמקד בתחרות של outbrain. זאת הייתה התחרות הראשונה שלי ב Kaggle, והיא הייתה ממש טבילת אש בשבילי. לדוגמה, ישבתי 3 ימים רצופים כדי לסדר את הדאטה כמו שצריך בשביל להריץ עליו מודל, עד שגיליתי בפורומים סקריפטים שעושים את זה הרבה יותר טוב ממני. אאוטבריין זו חברה מוכרת, שמטרה להתאים פרסומות לדפי תוכן מטרת התחרות היא לחזות קליקים כאמור. הדאטה מכיל רשימה של displays - זהו ביקור של משתמש בדף, ובו מוצגות לו מספר פרסומות, והמשתמש לחץ על אחת הפרסומות
  • #7: בואו נסתכל קצת על הנתונים אז ביקור של משתמש בדף נקרא display, והמטרה היא ליצור דירוג פנימי של הפרסומות ב disply ה ad_id זאת הפרסומת, קליק, uuid זה המשתמש, doc זה הדף בו המשתמש נמצא, time
  • #8: המטרה היא לדרג את הפרסומות ל diplay, מגבוה עד נמוך, לפי ההסתברות שהפרסומת הזו נלחצה
  • #9: המטרה היא לדרג את הפרסומות בפתרון, כשאם מיקמת את הפרסומות הנכונה תקבל ניקוד של 1. אם דירגת אותה שניה שלישית וכו, תקבל ניקוד יחסי. לכן הצורה הכי בסיסית להתייחס לבעיה כזאת היא כבעיית רגרסיה, כשכל רשומה מכילה משתמש,פרסומת ואת שאר הנתונים, ולבסוף עושים דירוג פנימי של כל חשיפה (display) לפי התחזית שהיא קיבלה חשוב בכל תחרות לקבל איזה תחושה של משמעות הניקוד
  • #10: אאוטבריין היו נדיבים, ונתנו לנו כמות גדולה של data, הכל anonymized כמובן.
  • #11: נסתכל קצת על הנתונים כדי לקבל תחושה של מה שיש לנו ראשית, יש 80 מיליון מודעות, 20 מיליון displays בקבוצת האיממון, ובערך חצי מזה ב test - די הברבה הזוכים במקום השני ציינו שאם משתמש\מודעה הופיעו פחות מ 80 פעם, הם לא השתמשו בו בתור פיצ'ר. אני חושב ש 80 זה קצת מוגזם, אבל הנה, כאן זה עבד להפ
  • #12: כשמסתכלים על נתונים של Kaggle ממעוף הציפור זה תמיד נראה כאילו: "יש הרבה נתונים, בו ניקח את כולם, נחלק אותם ל train ו validation ונתחיל לרוץ" אז בתור התחלה זה דבר די טוב, אבל אם רוצים להצליח יותר, צריך להסתכל על הנתונים, ולבדוק אם אנחנו באמת חוזים את מה שאנחנו אמורים לחזות. בתחרות הזאת, יש הבדל די ברור בין ה train ל test - רוב ה test set נמצא ביומיים נפרדים מה train. לכן, חלוקה נכונה ל train ו validation צריכה להתייחס לכך, לדוגמה, ע"י שמירת הימים 11,12 בתור validation בכללותם
  • #13: לפיתרון הבעיה השתמשו במודלים מגוונים כגון XGboost ו FTRL, אך המודלים המובילים בתחום הזה (וגם של ההמלצות) הם Factorization machine בהרצאה שלי על Light FM דיברתי על התפתחות המודלים האלה. נראה לי שארחיב קצת: ה FFM נתן את התוצאה הכי טובה מבין המודלים, ויותר מזה, מודל בודד נתן תוצאה יותר טובה מכל ה ensembles (חוץ מ1*)
  • #14: המודל הבסיסי של ההמלצות והקליקים, זכה בתחרות של נטפליקס ב 2009 וכו בדוגמא יש משתמש וסרט, אבל אצלינו זה משתמש ופרסומת
  • #15: הבעיה של ה col filt היתה שלא ניתן בצורה יעילה להוסיף פיצרים נוספים לאינטרקציות לדוגמה, כאן אנחנו רואים age, gender וכו'. ה Factorization machine פתר בעיה זו ע"י שינוי המבנה של הדאטה, והתייחסות לבעיה כבעיית רגרסיה ושימוש ב SVM עם כמה טריקים
  • #18: טוב זה קצת מורכב וגם לא קריטי, אבל כדאי להביו.. רק אציין שה FM נחשב מאוד חדשני, וה FFM הוא רק שיפור שלו לכן לא הופתעתי כשב kaggle, בעת הצגת ה FFM, ממציא ה FM מצא לנכון להיגב ולהסביר את ההבדלים, וטען מן הסתם כי המודל שלו לא פחות טוב, יותר מהיר וכו'. מפתחי ה FFM הסכימו עימו כי בסך הכל הם התבססו עליו, והם גם מנומסים, אך במבחן התוצאה ה FFM משיג תוצאות יותר טובות אז במילים פשוטות, אם ב FM יש משקל לכל feutare ולנו יש מיליון משתמשים, 200 אלף מודעות, 100 גילאים, אז יש 1200100 משקלים לעומת זאת ב FFM יש 1200100*3 משקלים.
  • #19: קטע שיש ב kaggle לעיתים קרובות, הוא איזושהי "דליפה". דליפה היא רמז לתוצאות ב test שניתן למצוא ב training. אם יש דליפה, חובה להשתמש בה, אחרת תהיו בפיגור משמעותי. בתחרות הזאת יש דוגמה לדליפה: יחד עם נתוני האימון, אאוטבריין שחררו 100GB של נתונים לגבי תנועה כללית של משתמשים (משתמש ודף בו הוא ביקר) בלי קשר לאם היתה או לא היתה לחיצה. בחינה מעמיקה יותר העלתה שחלק מהמשתמשים ביקרו בדפים אליהם הפנו פרסומות שהם ראו. מי שעשה 1+1 הבין שניתן להשתמש בנתונים האלה, והרוויח עוד שתי מאיות. מה שכן, צריך לשים לב אם הדליפה ולידית. לדוגמא, אם התחרות היא דו שלבית, ה test set בשלב השני לא יכלול את האותה הדליפה, וכל מי שבנה עליה, ידפק
  • #20: בתחרות הזאת, ה feature engineering היה חשוב. וזה היה ההבדל העיקרי בין הקבוצה המנצחת לביני (בנוסף ל pipeline יותר טוב פי 10) אז אחרי שדחפנו את המדינה של המשתמש, את השעה ביום, את היום בשבוע, את דף היעד ודף המקור, מגיעים לשלב שצריך להיות יצירתיים הפיצ'רים היצירתיים כאן היו הפרסומות המתחרות כאן לדוגמא נפלתי קצת כי בפורומים היה דיבור על כמויות גדולות של פיצ'רים, והזוכים השתמשו במעט, אך איכותיים
  • #21: כל הדברים שדיברתי עליהם עד עכשיו הם מעניינים, אבל הסיבה העיקרית שבחרתי לדבר על התחרות הזאת, היא איך להתמודד עם הרבה דאטה. ולא, התשובה היא לא לקנות מחשב יותר חזק. במקרה היה לי זמין שרת עם 100GB זיכרון באותו זמן, ועדיין הוא נתקע לפעמים. ב train set היו 80 M שורות, אז עיבוד זריז שלהן הוא עניין קריטי, כי כל הזמן רוצים להוסיף\להוריד\לשנות פיצ'רים בנוסף, אנחנו רוצים להריץ את המודל המון פעמים, עם grid search והרבה פרמטרים. לכן זה קריטי להבין אם המודל איטי, ומה אפשר לעשות כדי לגרום לו לרוץ יותר מהר אז כמו שאמרתי, זאת התחרות הראשונה שלי, וניגשתי עם הרבה מרץ לכל ה80M רשומות, והחלטתי לעשות מלא Join עם pandas כדי לקבל את ה dataset שאני רוצה. בנוסף, אחרי שהייתה לי את הטבלה שלי, הייתי צריך להמיר את הדאטה לפורמט הייחודי ש FFM דורש (תזכורת) כעבור יומיים הבנתי שזה לא עובד. ואז במקרה ראיתי איזשהו פתרון בפורום שהתחייחס לדאטה בצורה אחרת: קרא את הדאטהסטים בצורה קלאסית, שורה אחרי שורה, ויצר פורמט דומה מאוד למה שהייתי צריך שורה אחרי שורה.
  • #22: איך עושים זאת נכון?
  • #23: מסתבר, ששימוש בשיטות קלאסיות של פייתון, הרבה יותר מהיר מכלים כמו Pandas ה dictreader זו הפונקציה הכי פשוטה למעבר על csv שורה אחרי שורה, כשאת אחת העמודות ניתן להגדיר כמפתח בנוסף, אם אתם משתמשים רק בפונקציות פשוטות, אתם יכולים להשתמש ב pypy. למי שלא מכיר, מדובר במימוש מהיר של פייתון (שכתוב בפייתון) שיגדיל את הביצועים שלכם פי 3 דבר נוסף: דגימה. אנחנו השתמשנו ב 10% מהדאטה לאימון. גם זוכי הפתרון השני השתמשו במשהו כזה.
  • #24: לפעמים אומרים ש Machin elearning היום זה לקחת נתנוים ולזרוק למודל וזה נחמד אבל זה לא תמיד ככה זמן האימון של המודל הזה לדוגמא, הוא ביחס ישר למספר המשקלים (ולגודל של כל משקל אבל נתעלם) ואיך שולטים בזה?
  • #25: עכשיו משהו קצת טריקי. כאמור, השתמשנו במודל FFM. וזה מודל קצת כבד, עם הרבה משקלים. ומצד שני, אנחנו לוקחים את כל המשתמשים שיש לנו, ואת כל הפרסומות ומקודדים אותם הטריק פה הוא שיש בערך 10M משתמשים. להשתמש ב Label Encoder כמו שנהוג זאת התאבדות, מה גם שצריך לשמור את הencoding הזה אי]שהו. הפתרון כאן הוא שימוש ב Hash function. ה hash function הבסיסי של פייתון הוא אחלה, ויתן לכל דגימה מספר בן 19 ספרות. אבל, לכל מספר כזה, המודל שלכם יקצה משקל wij (או במקרה של ffm, חמישה משקלים, או כמה פיצ'רים שלא שמתם) ואתם לא רוצים 10^19 משקלים. לכן אתם יכולים "לשחק" קצת עם המספר שה hash מחזיר לכם, ולעשות לו Modulu. נכון, זה יפגע לכם קצת ב uniqueness, ואם תיישמו את זה אולי איזה משתמשבן 10 יקבל בטעות פרסומת לגלולות למניעת הריון, אבל בתוצאה הכללית שלכם ב kaggle זה לא כל כך יפגע. לכן, במקרה שלנו, כשיש לנו 10M משתמשים, נשתמש במודולו של 10M בערך (~2^24) מה שגיליתי בנוסף, זה שניתן לרדת עוד קצת, וכל ירידה בחזקה של 2 מכפילה את המהירות של המודל.
  • #26: תמיד אפשר לקחת יותר קטן, או לעשות כל מיני קירובים שפוגעים בצורה מדודה בתוצאות לצורך מחקר