מערכת המלצות של פורטל חדשותי: איפה נשברת ההגשה
הדבר הראשון שמת בפורטל חדשותי הוא הגשה אחידה לכולם. עמוד הבית מגיש לכולם אותו בלוק: למודל פשוט אין מאפיין שלפיו היו מפצלים את המשתמשים לקבוצות, והוא מדרג לפי מונה קליקים כללי.
קורא מעיר אחרת, עם קטגוריה אחרת וקצב קריאה אחר מקבל עניין של מישהו אחר — התאמה אישית של ההגשה קיימת רק פורמלית, ואת הירידה במעורבות מייחסים לעונתיות.
הכשל השני שקט יותר: חומרים טריים שוקעים. לכתבה שפורסמה לפני שעה אין היסטוריית אינטראקציות מצטברת, והיא מפסידה לידיעה מלפני שבוע עם מלאי אותות גדול. פורמלית המערכת פועלת כשורה, אבל בפועל הנושא החדשותי מוגש ברגע שבו הוא כבר לא רלוונטי, והפיד נראה כמו ארכיון.
השלישי — חזרות בפיד. סינון לפי מזהה החומר לא תופס ידיעה שנארזה מחדש: אותו סיפור נכנס בקטגוריה אחרת, בכותרת אחרת ובתמונה אחרת. בנוסף, לולאת משוב: הצגנו — קליק — הגברנו, ואחרי כמה ימים ההגשה מתכנסת לקבוצה צרה של סיפורים.
מכאן מופיע פתרון עריכה מאולתר. התורן מזיז חומרים ידנית למקומות הראשונים כדי למשוך תנועה לשיא הערב, ונושא בזה על כתפיו כל יום. נפרק איך זה נסגר: אילו אותות נבנים מחדש, איך מפרידים בין הזרמים «טרי» ו«לפי עניין», ומה למדוד כדי לראות את האפקט.
אפקט מדיד: שימור, קריאה עד הסוף ועומס על המערכת
את האפקט של הגשה מותאמת אישית רואים בארבע קבוצות מדדים: שיעור הקריאה עד הסוף, עומק הקריאה בתוך הסשן, חזרות לפורטל לאחר 7 ו-28 ימים, וכן ההפסקה בין ביקורים של קורא קבוע. בנפרד אנחנו מסתכלים על הטכני — זמן התגובה של בלוק ההמלצות ושיעור המעברים לאחר ההצגה. אם הבלוק מגיב לאט, הקריאה עד הסוף לא תגדל, גם אם ההגשה תיבחר בדיוק רב.
הקשיים העיקריים — להפריד את הצמיחה מעונתיות ומהאג'נדה החדשותית. את קבוצת הביקורת מחזיקים על ההגשה הקודמת, הלא-אקראית, ומשווים ימים דומים ב«טמפרטורה», ולא רק «לפני ואחרי». במקביל מחשבים אינדקס אורגני לכל הפורטל: אם כל הערוצים צומחים בבת אחת, אין לייחס את האפקט להמלצות.
העומס על המערכת עובר מ«אסוף את החשוב ביד» ל«בדוק חריגות». הבחירה האוטומטית מורידה מהעורך את המיון הידני של הפידים, ולכן הזמן הולך לכותרות, לבדיקת עובדות ולניתוח אנומליות, ולא לסידור בלוקים.
אפקט נפרד — הזנב הארוך של הארכיון: חומרים שיצאו מהבחירות הידניות ממשיכים לקבל הצגות וקריאות עד הסוף.
מחקרים של Reuters Institute מראים שדווקא הקוראים החוזרים מחזיקים את היציבות של כלי תקשורת, ולא זינוקים חד-פעמיים בתנועה, ולכן בדוח אנחנו מתעדים בנפרד את שיעור הביקורים החוזרים לפי קוהורטות.
פיילוט מריצים על חלק מהתנועה, ואת המדדים ואת כלל החישוב שלהם מתאמים לפני ההתחלה — כך הצמיחה נראית במספרים ולא בפרשנות.
פורמטים של עבודה של מערכת המלצות: מה לבחור בפורטל
את סכמת ההגשה בוחרים לפי צפיפות הנתונים, ולא לפי «מתקדמות» האלגוריתם. סינון שיתופי (collaborative filtering) בצורה שבה מיישמים אותו ב-Netflix נשען על היסטוריית קריאות מצטברת: כל עוד המטריצה «קורא — חומר» דלילה, בלוק ההמלצות מציג קישורים אקראיים. מאפייני תוכן מתחילים מיד — טקסט, קטגוריה, תגיות, טריות הפרסום — אבל מהר יוצרים הטיה לנושא אחד.
ההבדל בין המצבים נראה בשלושה צירים: האם נדרשת תנועה מצטברת, כמה עבודה ידנית לוקחת על עצמה המערכת, וכמה יקר יהיה להחליף סכמה אחר כך.
| מצב | מתי מתאים | מגבלות |
|---|---|---|
| סינון שיתופי | זרם קוראים יציב, ולחומרים מצטברת היסטוריית צפיות | לא עובד בלי נתונים מצטברים; חומרים חדשים וקטגוריות נדירות לא מקבלים הצגות |
| מאפייני תוכן | התחלה קרה, תחום צר, הפיד נדרש מיד | הטיה לנושאים פופולריים, התחשבות חלשה בהרגלים האישיים של הקורא |
| סכמה היברידית | הפורטל גדל, חלק מהבלוקים כבר מכוסים בסטטיסטיקה | דורשת כיוונון משקלים וניטור, אחרת חלק אחד מדכא את האחר |
| כללי העורך | חדשות ראשיות, בחירות ידניות, פרויקטים מיוחדים לפי נושא | לא מתרחב לזנב הארוך, נדרשים נוהל והרשאות גישה |
הסכמה ההיברידית היא הפתרון המעשי לתאימות: מאפייני תוכן מכסים את ההתחלה הקרה ואת הקטגוריות החדשות, השיתופיים מתחברים במקום שבו הסטטיסטיקה כבר נאספה, והמשקלים נבחנים מחדש לפי מדדי הקריאה עד הסוף, ולא לפי העין.
המצבים לא שוללים זה את זה — הפורטל יכול להחזיק היבריד בעמוד הבית וכללי עורך טהורים בבלוק החדשות הדחופות.
כללי העורך תואמים לכל אחד מהמצבים: הם קובעים חומרים בעדיפות ואיסורים, והאלגוריתם ממלא את השאר. ההגשה בעמוד הבית מועברת לפרונט בחוזה אחד, ולכן החלפת סכמה לא דורשת לכתוב מחדש את הפריסה — משתנים סדר הבלוקים והמשקלים, והמערכת ממשיכה לעבוד בממשק הרגיל.
איך אנחנו מטמיעים: ביקורת לוגים, סכמה, כיוונון, בדיקה
סדר השלבים כאן אינו מקרי: כל עוד לא ברור אילו אירועים באמת מגיעים לאחסון, כל מודל נבנה על חול. לכן מתחילים בלוגים, ולא בבחירת האלגוריתם, ורק אחר כך מקבעים את סכמת החליפין ואת שיטת הבדיקה.
- ביקורת לוגים. מפרקים מה בדיוק נרשם: הצגות, קליקים, קריאות עד הסוף, רישומים, שאילתות חיפוש. בודקים שלמות, כפילויות, השהיית מסירה והצמדת אירועים לפרופיל הקורא. בפלט — רשימת פערים: איפה המזהה הולך לאיבוד, אילו שדות לא תמיד מתמלאים.
- תיוג אירועים. מתאמים מילון: שם האירוע, נקודת הזמן, המקור, משקל הפעולה. קריאה עד הסוף שוקלת יותר מקליק, ומעבר אקראי — פחות. מילון אחיד מאפשר לאמן מחדש את המודל ולהשוות תקופות זו לזו כראוי.
- סכמת אינטגרציה. מחליטים איך הבחירות מגיעות לעמוד: הגשה מהשרת, שירות הגשה נפרד או מטמון מוכן. מקבעים את ההתנהגות כשירות אינו זמין — הקורא צריך לראות רשימה הגיונית, ולא בלוק ריק.
- בדיקה על היסטוריית תנועה. מריצים את המודל על הלוגים המצטברים: משחזרים סשנים לפי זמן, מגישים המלצות ובודקים אם היו נופלות בפעולות בפועל. השגיאות נראות עוד לפני ההצגה הראשונה לקורא חי.
- ניסוי מקוון. מדליקים את ההגשה על חלק מהתנועה לצד המנגנון הנוכחי: עוקבים אחרי עומק הסשן, שיעור הקריאה עד הסוף וזמן התגובה של העמוד. הפריסה נעשית במנות, והחזרה אחורה — בהחלפה אחת.
- קליטת התוצאה. משווים את המדדים לאלה שנקבעו לפני ההתחלה, בודקים התנהגות בעומס שיא, בפרופיל קר ובנתונים חסרים. מעבירים לצוות נוהל אימון מחדש, ניטור וניתוח תקלות אופייניות.
מה נשאר לצוות הפורטל אחרי מסירת הפרויקט
מסירת הפרויקט היא לא הדגמה של שירות עובד, אלא העברה של מערך שהצוות של הפורטל ממשיך להפעיל בכוחות עצמו. לכן נמסר לידיים לא רק קוד, אלא כל מה שצריך כדי לשנות כללי דירוג, לאמן מחדש את המודל ולנתח תקלה בלעדינו.
קליטה נעשית לפי רשימה, ולא לפי מצגת: כל ארטיפקט נבדק בצד הלקוח — מרימים סביבה על התחנה שלהם, מריצים אימון מחדש, מחזירים גרסה אחורה.
- קוד האימון וההגשה — מאגר (ריפוזיטורי) עם קונפיגורציות, תלויות מקובעות והוראות להרמת סביבה מאפס.
- סכמות אינטגרציה — מסלול האירועים מההצגה ועד לאחסון: פורמטים של הודעות, מסירה חוזרת, נקודות כשל, השהיית עדכון המאפיינים.
- נוהל עדכון מודלים — תדירות האימון מחדש, חתכי בקרה, סף העלאה של גרסה חדשה וסדר החזרה לקודמת.
- מדיניות גישה — תפקידים לקריאת נתונים, הפרדה בין סביבת העבודה לסביבת הבדיקות, תיעוד ביומן של פניות לנתונים אישיים.
- מערך בדיקות אוטומטיות — שיעור הפגיעות בטופ, גיוון ההגשה, התנהגות על משתמשים חדשים; מחושב אחרי כל אימון מחדש.
- תזכיר לטיפול בתקלות — מה לבדוק קודם כל כשיש ירידה במדדים, איך להחזיר גרסה אחורה ואיך להשיב את מערך הנתונים הקודם.
ההעברה לצוות נעשית בשלב נפרד: בשתיים-שלוש פגישות המהנדסים של הלקוח מאמנים בעצמם את המודל ומוציאים גרסה להגשה. מכאן המערך חי בלי ההשתתפות שלנו — אנחנו נשארים בקשר, אבל התיקונים נעשים בכוחות עצמם.
מקרה בוחן: איך גדל עומק הקריאה בפורטל חדשותי
הפורטל חי על פיד כרונולוגי: חומרים עמדו לפי זמן הפרסום, והכל הכריע אם הידיעה תגיע למסכים הראשונים של עמוד הבית. עומק הקריאה עמד על 1.3 כתבות לביקור, יותר ממחצית המבקרים עזבו את עמוד הבית בלי לפתוח אף חומר. את הבסיס קיבעו לפי חלון של 30 ימים לפני ההטמעה — כדי להשוות אחר כך על אותם מדדים.
מה שינינו
את הפיד הרכיבו במודל היברידי מבוסס סינון שיתופי: היסטוריית הקריאה של המבקר המסוים, התנהגות של קוראים עם תחומי עניין דומים, טריות החומר ומשקל קטגוריה מהמערכת.
ההגשה מחושבת מחדש בכל רענון עמוד, עבור מבקרים חדשים היא מתמלאת בפופולרי בקטגוריה בשעות האחרונות, ואת החומרים בעדיפות המערכת מחזיקה בפתח ברשימה נפרדת.
| מדד | לפני ההטמעה | אחרי |
|---|---|---|
| עומק קריאה, כתבות לביקור | 1.3 | 3.1 |
| יציאות מעמוד הבית בלי לפתוח חומר | 57% | 31% |
| חזרות לפורטל בתוך שבוע | 22% | 38% |
| שיעור הביקורים עם הגשה מותאמת אישית | — | 74% |
המגבלות נשארו, ואנחנו לא מסתירים אותן. למבקרים בלי הסכמה להתאמה אישית מגישים הגשה עריכתית — זה כ�רבע מהקהל. המודל מתאמן מחדש פעם ביום, ולכן לא מגיב מיד לנושא חדשותי חריף — בימים כאלה מעלים את משקל הטריות ידנית.
עומק הקריאה גדל ביותר מפי שניים, וכניסות ריקות לעמוד הבית פחות: ההתאמה האישית לוקחת על עצמה את שגרת הסידור, והעריכה נשארת בידי בני אדם.
במה נבחרת התנהגותית שונה מנבחרת עריכתית?
נבחרת התנהגותית קובעת את סדר החומרים לפי פעולות בפועל של הקוראים: מה פתחו, כמה עמוק קראו עד הסוף, למה חזרו, באיזה פסקה עזבו. נבחרת עריכתית נבנית על החלטה של אדם — הוא קובע את עדיפות הנושא, את סדר הקטגוריות ואת החומר שיוצא לעמוד הראשון.
האלגוריתם חזק יותר באופן אובייקטיבי במקום שבו הקהל גדול והטרוגני. הוא מחזיק את הזנב הארוך של הפרסומים, שאותו העורך פיזית לא מספיק לסדר ביד, ומגיש לכל קורא סדר הגשה משלו.
העורך הכרחי בדברים אחרים: בימי אירועים גדולים, כשחשוב לא הצבעוניות של הכותרת אלא תמונה אחידה של היום, וכשצריך לשמור במודע על איזון בין נושאים.
הנקודות החלשות הן מראה. אלגוריתם בלי היסטוריית צפיות מספקת נסגר על הפופולרי ביותר, מושך כותרות צעקניות ומצמצם בהדרגה את הנושא לכמה קטגוריות. עורך לא מתרחב: סדר אחד לכולם, תיקון ידני לא עומד בקצב של זרם החדשות, וקשה לבדוק את הסובייקטיביות של ההחלטה במדד.
מכאן המצב ההיברידי — אפשרות מעשית לרוב הפורטלים. האלגוריתם מדרג בתוך בלוקים נושאיים, ואת הגבולות קובעת המערכת: עמדות קבועות בעמוד הראשון, הגבלת חלקו של נושא אחד בהגשה, הורדה בדירוג של חומר עם נטישה גבוהה של קוראים.
בחירת הסכמה נקבעת לפי שיעור הקוראים הקבועים, תדירות הפרסומים ועד כמה חשוב למערכת לשלוט ידנית בעמוד הראשון.
ספקות לגבי איכות הנתונים וההתחלה הקרה
ההתנגדויות לפני ההתחלה נשמעות כמעט אותו דבר: אין תיוג, לחומרים חדשים אין צורך בהמלצות, וההעדפות של השנה שעברה לא משקפות את העניין של הקהל. עונים לגופו של עניין.
מתחילים לא מהמודל אלא מבדיקת נתונים: לוגים של הצגות וקליקים, שיעור התנועה האוטומטית, עומק הסשן, שלמות מסווג הקטגוריות. במקום שבו ההיסטוריה קטנה, עובדת קרבה לפי טקסט ותגיות — הנבחרת נבנית מהיום הראשון, והמשקלים האישיים מתעדכנים בהתאם לאירועים.
איך אתם מגישים המלצות בלי היסטוריה של משתמש?
לקוראים חדשים — הפופולרי בקטגוריה עם התחשבות בשעת היום ובאזור; אותות אישיים נדלקים אחרי כמה חומרים שנקראו. כתבות טריות נכנסות לנבחרת לפי ניתוח טקסט ותגיות, בלי להמתין לקליקים.
איך אתם מעריכים את איכות הנבחרת?
על נתונים היסטוריים — מדגם נדחה לפי זמן, כדי שהמודל לא יציץ לעתיד, ובנוסף מדדי פגיעות וגיוון. על תנועה חיה משווים לקבוצת ביקורת: עומק הסשנים, חזרות.
מה עם טריות החדשות?
משקל הטריות הוא פרמטר נפרד של ההגשה, ולא אימון מחדש של כל המודל. החומר עולה בשעות הראשונות, ואחר כך מפנה מקום לאלה שמחזיקים את הקשב. החלון מכוונן לפי קטגוריות: בחדשות דחופות קצר יותר, בניתוחים ארוך יותר.
באיזו תדירות מאמנים מחדש את המודלים והאם אפשר לחזור אחורה?
האימון מחדש נעשה לפי לוח זמנים ולפי טריגר של הידרדרות מדדים. המשקלים מתעדכנים בלי לעצור את ההגשה, הגרסה הקודמת נשמרת לחזרה אחורה, וההפעלה — אחרי הרצה על תנועה בצל.
נדבר על המשימה: מה צריך לדעת לפני ההתחלה
כדי לדון במשימה לגופו של עניין, אנחנו לא צריכים גישה מלאה לפרודקשן — די בתיאור הפורטל ובמיצויים.
ככל שנתוני הקלט מדויקים יותר, כך נחזור מהר יותר עם הערכה ותוכנית עבודה: נפרק את ההיקף לשלבים, נציין מה אנחנו עושים בצד שלנו, ואילו נתונים והחלטות נדרשים מהצוות שלכם לפני תחילת הפרויקט.
- פרופיל התוכן וההיקפים: כמה חומרים מתפרסמים ביממה, איזה חלק הם חדשים לעומת הארכיון, באיזו תדירות מתעדכנות הקטגוריות וכמה זמן חומר חי בפידים.
- גישות לאנליטיקה: מיצוי אירועים ל-3–6 חודשים — הצגות, קליקים, קריאות עד הסוף, חזרות, חיפוש בתוך הפורטל. מזהים אנונימיים של הקורא וחתימת זמן מספיקים, נתונים אישיים לא נדרשים.
- תיוג החומרים: האם יש תגיות, קטגוריות, ישויות, אמבדינגים באחסון שלכם — או שצריך להרכיב אותם מהטקסטים בצד שלנו.
- נקודות ההגשה: היכן ההמלצות צריכות להופיע — הפיד הראשי, בלוק «דומה» בתוך הכתבה, ניוזלטרים, אפליקציית מובייל. לכל נקודה חשוב מערך אותות משלה.
- מגבלות התשתית: היכן עובד הפרודקשן, איזה זמן תגובה של ההגשה נחשב סביר ואיזה מרווח עומס נדרש בשעות שיא.
- כללי המערכת: מה אסור להמליץ, כמה קידום ידני צריך להשאיר בפיד, והאם יש דרישות לגיוון הקטגוריות.
- מדדי הצלחה: מה נחשב תוצאה — שיעור הקריאה עד הסוף, עומק הסשן, חזרות למחרת. מהם תלויה סכמת ההשוואה לפיד הנוכחי.
- מי מקבל את ההחלטה: אדם מצד המערכת ומצד המוצר, שמאשר את קליטת השלבים.
תארו את המשימה בצורה חופשית — זה יספיק כדי לחזור עם הערכה, תוכנית עבודה ורשימה של מה שנדייק בשיחה הראשונה.







