מתודות עבודה

מה עושה אנליסט ביום יום? (חלק ראשון)

By אוקטובר 2, 2018 One Comment

הקדמה

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

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

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

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

הארות לפני ההתחלה –

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

שלב ראשון – מה הוא הטוב?

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

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

אז מה הוא הטוב שאליו אנחנו רוצים להגיע?

  • האם רכישות זה דבר טוב?
    • כן, ברור, שתי רכישות טובות מרכישה אחת.
  • האם רכישות מסכום מסוים הן טובות לעומת סכום אחר?
    • כן, ברור, רכישה אחת בסכום של 25 דולר טובות משתי רכישות של 10 כל אחת (או שמא? האם רכישה ב10 דולר תביא איתה עוד רכישה בעתיד הקרוב?).
  • האם די במכפלה של כמות הרכישות כפול ההכנסה כדי לקבוע מה הוא הטוב?
    • כנראה שלא, צריך למצוא עוד שיקולים רלוונטיים
  • האם "מוצר" שנמצא באוויר חודש שקול למוצר שנמצא באוויר שנה?
    • לא, נצטרך למצוא דרך לנרמל את המידע או פשוט לקבל החלטות חותכות
  • במקרה שלנו של קלט יכול להיות מקושר לכמה "מוצרים" – איך זה יכול להשפיע לנו על התכנית?
    • זה יכול לייצר מתאם בין הקלט להכנסה שהוא מובן מאליו ומיותר (קלט מסוג א' מקושר ל-80 "מוצרים" ומכניס 10 דולר עבור כל מוצר וקלט מסוג ב' מקושר ל"מוצר" אחד שמכניס 20 דולר לכל מוצר – האם מוצר א' טוב יותר ממוצר ב'? או שיש פה עניין של כמות קישורים)

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

שלב שני – בשביל להכין חביתה, צריך לשבור כמה טבלאות

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

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

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

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

שלב שלישי – מעז יצא מתוק ומשלוש עמודות הוצאנו עוד חמש

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

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

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

 

לסיכום החלק הראשון –

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

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

 

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

 

ובנתיים, מה העמדה שלכם?

מה אתם עושים ביום יום?

דומה בנתיים? שונה? אם שונה – איך שונה?

שתפו! שתפו!

One Comment

Leave a Reply