פיתוח מערכת המלצות לקריפטו-מטבעות: היכן נשבר האות
כלל שהתגלה על נתונים היסטוריים פועל רק במצב השוק שבו הוא התגלה.
כל עוד תנודתיות השוק נמוכה והנזילות מפוזרת באופן צפוי, המשקלים מפרידים בין הנכסים בביטחון; עם החלפת המשטר — תנועה חדה או זרימת נפח בין פלטפורמות — אותו היגיון מתחיל להפיק אותות שגויים, ובתדירות גבוהה יותר ככל שהוא נראה בטוח יותר בקטע הקודם. הפער מתגלה בימים הראשונים לאחר שבירת המגמה, כאשר המודל טרם הספיק לצבור הקשר חדש.
המקור השני לטעויות הוא השהיית הנתונים. המחיר, הנפחים והנתונים מהרשת מגיעים באופן א-סינכרוני ובתדירויות שונות, וחלק מהמקורות מספקים חתך באיחור של אחד-שני מרווחים.
אם איסוף הנתונים וחישוב ציון הניקוד אינם מתואמים בזמן, ההמלצה נוצרת על בסיס תמונה מיושנת: האנליטיקאי רואה המלצה שהשוק כבר אינו מאשר.
איכות הנתונים ההיסטוריים מחמירה את התמונה. חוסרים, אזורי זמן שונים בין המקורות, תיקונים רטרואקטיביים של נרות והטיית השורדים — מדגם שממנו נפלו כלים שנמחקו מהמסחר — הופכים את המערך ל"נוח": המודל מעולם לא ראה כיצד השוק מתנהג כאשר מחצית מהנכסים נעלמת. על מערך כזה כל תצורה נראית אמינה יותר מכפי שתתגלה בעבודה.
עבור מעגל האנליטיקה הדבר מתבטא באובדן אמון בהמלצות: מתקבלות החלטות, אך משוב עליהן אינו נאסף, ואין עוד אפשרות להעריך היכן בדיוק טעתה המערכת. אנו מפרקים כיצד סוגרים זאת — מעמידות בפני החלפת משטר ובקרת רעננות הנתונים ועד לבדיקת איכות ההיסטוריה לפני שבונים עליה דבר מה.
מה משתנה לאחר ההטמעה: דיוק האותות ומהירות התגובה
לפני ההטמעה הציונים חושבו באצוות: השוק כבר נעלם, והפלט הדביק אותו באיחור. דירוג רב-גורמי מעביר את החישוב המחודש למודל מבוסס-אירועים — משקל כל גורם משתנה יחד עם המחיר, הנפח והנזילות, ולא לפי לוח זמנים.
דיוק ושיעור ההתראות השווא
הדירוג מחזיק כמה גורמים בלתי תלויים ומרווה את האות אם הם חלוקים ביניהם. סף האישור מכוון בנפרד לפי סוג הנכס: שיעור ההתראות השווא יורד בכמחצית מבלי לאבד ממספר האותות שהתקבלו. נתונים על עומק השוק נאספים ממספר מקורות, ובהם CoinGecko, ולכן הפלט אינו מידרדר כאשר אחד מהם נכשל.
מהירות החישוב המחודש בתנועת שוק
החישוב המחודש מופעל על ידי אירוע, ולא על ידי טיימר: הציון מתעדכן בתוך שניות לאחר זינוק בתנודתיות. המלצה שהתיישנה בזמן החישוב מסומנת כלא-רלוונטית ואינה מגיעה לצרכן — נעלם סוג שלם של כשלים שבהם ההחלטה התקבלה על סמך תמונת שוק של אתמול.
עמידות בעומסי שיא
תור החישוב המחודש מופרד מהגשת הפלט: זינוק בבקשות אינו מעכב את ההערכה מחדש, וההערכה מחדש אינה חוסמת את הממשק. בעומסי שיא זמן התגובה נשאר אחיד, ותפוקת המערכת גדלה בהוספת מעבדים מבלי לשכתב את היגיון הדירוג.
השוואת מצבי הערכת נכסים: זרימה, אצווה, היברידי
מצב החישוב קובע כיצד מהר ההמלצה משקפת את שינוי השוק וכמה תשתית היא צורכת.
הבחירה אינה בינארית: עיבוד בזרימה, חישוב מחדש באצוות ומצב היברידי סוגרים משימות שונות, ולעיתים קרובות הם דרים בכפיפה אחת על אותה חלון תצוגה — נכסים חדשים מחושבים ברצף, ופרופילים היסטוריים מחושבים מחדש בלילה.
קריטריון הבחירה הוא השהיית הפלט המותרת ופרופיל העומס. אם האות נדרש ברגע הכניסה לפוזיציה, חישוב יומי אינו מתאים: עד הערב משקלי הגורמים חלוקים על השוק. אם ההמלצות מתעדכנות עבור תיק ארוך-טווח, עיבוד רציף מוסיף עומס בלי רווח בדיוק.
| אפשרות | מתי מתאים | מגבלות |
|---|---|---|
| חישוב מחדש באצוות | תיקים ארוכי-טווח, עדכון אחת ליום או לעיתים רחוקות יותר, מודלים כבדים | השהיית הפלט — שעות; בתנועת שוק חדה משקלי הגורמים מתיישנים |
| עיבוד בזרימה | אותות ברגע העסקה, תגובה לתנודתיות בתוך שניות | עומס קבוע בעומסי שיא, נדרש מלאי כוח ובקרת תורי אירועים |
| מצב היברידי | תרחישים משולבים: תיקונים תכופים מעל חישוב מלא נדיר | מורכב יותר לתחזוקה — שני ענפי חישוב וכללים לתיאום ביניהם |
בפועל בוחרים לרוב במצב היברידי: חישובים כבדים מתבצעים באצוות, ותיקונים קלים — בזרימה. זה מחליק את העומס בעומסי השיא ושומר על השהיית הפלט בגבולות שהמוצר עצמו קובע, ולא התשתית.
שלבי ההטמעה: מפירוק הנתונים ועד למסירה לתפעול
לפני חישוב הציונים אנו מפרקים את הנתונים: עסקאות בורסאיות וספר פקודות, מדדי on-chain, אותות חדשותיים וחברתיים — לכל מקור תדירות עדכון משלו והשהיה משלו. מערכת שנבנית מעל זרם מלוכלך משחזרת את העיוותים שלו, ולכן השלב הראשון הוא סקר ומדידת איכות, ולא אימון המודל.
- פירוק מקורות הנתונים. מרכיבים רשימת זרמים, ולכל אחד קובעים תדירות, השהיה, עומק היסטוריה ואופן אספקה. בנפרד מחשבים את שיעור החוסרים, הכפילויות והערכים האנומליים — מהם ניכר אילו מקורות יהיה צורך לנקות ואילו להחליף.
- סכימת החישוב. קובעים מאילו גורמים מורכב הציון הסופי של הנכס: דינמיקת המחיר והנפח, נזילות, תנודתיות, פעילות on-chain, רקע חדשותי. לכל אחד מגדירים חלון, שיטת נרמול וכללי חיתוך חריגים, כדי שסולמות שונים יהפכו בני-השוואה.
- כיול המשקלים. תרומת הגורמים מכוילת על נתונים היסטוריים ומוגבלת מלמעלה, כדי שאות רועש אחד לא ימשוך את ההמלצה אליו. את המשקלים מוציאים לקונפיגורציה ולא לקוד — מתקנים אותם בלי לבנות מחדש ולהוציא גרסה.
- בדיקה על חתכים היסטוריים. מריצים את הסכימה על תקופות עוקבות, באימון על העבר בלבד — כך שוללים הצצה לעתיד. בוחנים לא רק תשואה, אלא גם את יציבות הדירוג בעת הזזת התקופה ובעת כיבוי גורם נפרד.
- קבלה ומסירה לתפעול. פורסים את החישוב, מגדירים ניטור איכות נתוני הקלט ונדידת הציונים, מתארים את נהלי סקירת המשקלים ואת סדר החזרה לגרסה הקודמת של הסכימה.
לאחר המסירה, צוות הלקוח רואה מדוע הנכס קיבל דווקא ציון זה: כל גורם ותרומתו נותרים ניתנים לצפייה, ואינם מתמוססים ב"קופסה שחורה". זה הופך את המערכת לניתנת לתחזוקה בכוחות המהנדסים של הלקוח עצמו.
מה אנו מוסרים לידיים: קונפיגורציות, סכימות, נהלים, תיעוד
הפרויקט נסגר לא בהדגמה, אלא במערכת חפצים (ארטפקטים) שלפיהם אפשר להפעיל ולפתח את מערכת חישוב ההמלצות בלעדינו. כל האמור מועבר למאגר שלכם עם הרשאות שינוי — לא דוח, אלא יחידות עבודה: קונפיגורציה, סכימות, נהלים, תיעוד.
- קובצי קונפיגורציה של החישוב: משקלי הגורמים, ספי הפעלת האותות, חלונות מיצוע, כללי חיתוך כלים בעלי נזילות נמוכה — עם הערות מהיכן נלקח כל ערך ומעבר לאיזה גבול איכות ההערכה יורדת.
- סכימות זרמי נתונים: ממקורות הציטוטים והאירועים ברשת ועד לחלון ההמלצות, עם נקודות בקרה, השהיות בכל קטע והמקום שבו מחושבת כל מטריקה.
- נהלי גישה: תפקידים לקריאה ולשינוי משקלים, הפרדת הרשאות לנתונים היסטוריים ולקונפיגורציה של מעגל העבודה, יומן של כל התיקונים עם המבצע והזמן.
- נוהל עדכון מאפיינים: תדירות החישוב המחודש, סדר הוספת גורם חדש, בדיקה מחייבת על נתונים היסטוריים לפני הוצאה לאוויר, ונוהל חזרת הקונפיגורציה לגרסה הקודמת.
- תיעוד החישוב: נוסחאות אגרגציה של ההערכה הרב-גורמית, הנחות בעת חוסרים בנתונים, התנהגות המערכת בעת השהיה או אובדן מקור.
- ניטור: מערך מטריקות בקרה לאיכות הפלט, ספי הידרדרות, סדר פעולות המהנדס התורן ותבניות התראות.
- הוראות פריסה ושחזור: בניית הסביבה מאפס, מיגרציות של מאגר הנתונים, נקודת בקרה שממנה המערכת עולה לאחר תקלה.
מהשטח: בנייה מחדש של הערכת נכסים עבור מעגל אנליטיקת הבורסה
אנו מפרקים מקרה של מעגל אנליטי בבורסה: היה צורך להחליף אות בודד בהערכה רב-גורמית של נכסים, כדי שההמלצות לא יישברו בקטעים תנודתיים. העבודה התנהלה באיטרציות — תחילה נמדדו המטריקות "לפני", אחר כך נאספו הגורמים והחישוב עצמו נבנה מחדש.
מה לא עבד
ההמלצות נבנו על מאפיין אחד — דינמיקת המחיר בשעות האחרונות. בשוק רגוע שיעור ההמלצות השגויות עמד על כ-34%, ובתנועות חדות הפלט למעשה התהפך: הנכס נכנס לרשימת הקנייה כבר בנסיגה.
חישוב מלא של המערך ארך יותר מ-40 דקות, ולכן עד לפרסום חלק מהאותות הספיקו להתיישן, ויציבות החישוב בשעות השיא נשמרה רק הודות להתערבות ידנית של אנליטיקאים.
מה שינו ומה קיבלנו
הרכבנו הערכה רב-גורמית: תבניות מחיר, עומק ספר הפקודות, נזילות הצמד, תנודתיות וקורלציות בתוך הסל. לכל גורם נוסף משקל, ולציון הסופי — סף ביטחון: מתחתיו ההמלצה אינה מתפרסמת ועוברת למצב מעקב.
את החישוב העברנו למאגר העמודתי ClickHouse, ואת החישוב המחודש עשינו אינקרמנטלי — רק עבור הכלים שהשתנו.
ניתוח השגיאות שולב במחזור עצמו: המלצה שנדחתה מסומנת בסיבה — אות מיושן, נזילות דקה, קונפליקט בין גורמים — והמשקלים נסקרים מחדש לפי הסטטיסטיקה המצטברת.
התוצאה במטריקות: שיעור ההמלצות השגויות ירד מ-34% ל-11%, החישוב המלא התקצר מ-40 ל-3 דקות, ושיעור ההמלצות שבוטלו בתוך שעה לאחר הפרסום — מ-27% ל-6%. כשלי החישוב תחת עומס אינם קיימים עוד: התור מידרדר בהדרגה, ומעניק עדיפות לצמדים הגדולים.
במה נבדלת הערכת נכסים בזרימה מהערכה באצוות
ההבדל הוא מתי מחושב הציון. הערכה באצוות מחשבת מחדש את כל רשימת הנכסים לפי לוח זמנים, והערכה בזרימה מעדכנת את הציון לפי כל אירוע — ברגע שהגיעה עסקה או שהשתנה ספר הפקודות. הנתונים זהים, ומשתנה רגע החישוב והדרישות מהמעגל.
מבחינת השהיה והעומס מדובר בשני פרופילים שונים. מעגל הזרימה מחזיק את חלון המאפיינים בזיכרון ומחשב בתוספות: התגובה — שניות, אך העומס קבוע, ומתכננים אותו עם מלאי לעומסי שיא של השוק.
האצווה יוצרת פרצי עומס קצרים: בזמן חוסר פעילות המשאבים פנויים, אך ההחלטה מגיעה בהשהיית חלון החישוב המחודש.
הדיבוג נבדל במידה רבה יותר. חישוב באצוות הוא דטרמיניסטי: חלון נתונים אחד נותן תוצאה אחת, ותקלה משוחזרת בהרצה חוזרת. הזרימה תלויה בסדר ובזמן הגעת האירועים, ולכן נדרשים דה-דופליקציה, כתיבה אידמפוטנטית ושימור זרם הקלט — אחרת לא ניתן לנתח את התקרית.
בחירת המצב נשענת על זמן התגובה הנדרש ועל הקצב שבו המאפיינים עצמם משתנים. ב-multi-factor scoring עם עשרות גורמים מותירים את החישוב באצוות כעיקרי, ובזרימה סוגרים מאפיינים עם תגובת שנייה: פרצי נפח, תנועות מחיר חדות.
אם המעגל כבר פרוס, אין צורך לשכתב אותו: שכבת האצווה נשארת מקור האמת, והזרימה מונחת מעליה כמאיצה — קוראת את אותו זרם נתונים ממקור כמו CoinGecko וכותבת לאותו מאגר ציונים. המצב מוחלף בקונפיגורציה, כך שתחילה מוציאים את ההיברידי לאוויר ומשווים את הפער על חלונות היסטוריים.
ספקות טכניים: נתונים, השהיות, עמידות המודל
ההמלצות נשענות על זרם הציטוטים, עומק השוק והיסטוריית העסקאות — הנתונים מגיעים באי-אחידות, בהשהיה שונה ובחוסרים. להלן תשובות לספקות שעולים בדרך כלל לפני ההתחלה: השהיות מקורות, פערי נזילות, למידת יתר של המודל, היקף ההיסטוריה והתחברות לפלטפורמה שלכם.
מה יקרה בעת השהיה או ניתוק של מקור נתונים?
הציטוטים מגיעים מכמה ספקים בלתי תלויים ומוצלבים ביניהם. אם אחד מפגר או מספק חריג, המערכת לוקחת חתך מאומת ומסמנת את הציון כלא-מלא, ובמקרה של פער נזילות עוצרת את הפלט במקום לחשב לפי מחיר מיושן.
כיצד אתם מגנים על המודל מפני למידת יתר?
האימון והבדיקה מופרדים בזמן, ובין החלונות נותר פער — המודל אינו יכול להציץ לנתוני העתיד. את האיכות מחשבים בנפרד לכל תקופה, ולכן נפילה בקטע חדש נראית מיד, ולא רק לאחר ההשקה.
כמה חתכים היסטוריים נדרשים וכיצד הם נשמרים?
נדרשות תקופות של עלייה וגם של ירידה, כולל נזילות נמוכה. אנו שומרים חתכים כתמונות במרווח קבוע: החישוב המחודש של המאפיינים אינו נשבר אם הספק תיקן את ההיסטוריה בדיעבד.
מה עם איכות הנתונים?
חוסרים, כפילויות ופיצול עסקאות נחתכים בכניסה לפי כללים מפורשים. שיעור הרשומות שנפסלו והפערים בין המקורות מוצגים בניטור — מהם ניכר אם הנתונים מידרדרים או לא.
כיצד זה ישתלב בפלטפורמה הנוכחית?
אנו מתחברים דרך ממשק תוכנה וחילופי אירועים, בלי להעביר בסיסי נתונים ובלי להחליף מאגר. את ההמלצות מוסרים כציונים מוכנים או כמערך גורמים — את הפורמט מתאמים, והחזרה להיגיון הקודם נותרת זמינה.
נדון במשימה: מה לשלוח לצורך הערכה ותוכנית עבודה
ההערכה של מערכת המלצות לנכסי קריפטו מחושבת לא לפי היקף הקוד, אלא לפי מספר המקורות שיש לאחד לדירוג רב-גורמי אחד. להלן מה לשלוח כדי שנחזור עם הערכה ותוכנית עבודה, ולא עם שאלות הבהרה כעבור שבוע.
- נקודות אינטגרציה. פרטו את המערכות שמהן מגיעים הנתונים: ערוצי בורסה, ארנקים, בסיסי נתונים פנימיים, תפוקות אנליטיות. ציינו אם יש קליטה בזרימה או רק תפוקות לפי לוח זמנים — מכך תלויה ארכיטקטורת החישוב המחודש.
- הרשאות גישה לנתונים. מעגל בדיקה והרשאות קריאה-בלבד למאגרים, ארגזי חול של מקורות בורסאיים. מפתחות פרודקשן בשלב הראשון אינם נדרשים — עובדים על עותקים וחתכים אנונימיים.
- מערך גורמי הדירוג. מה כבר נלקח בחשבון: תשואה לתקופות, תנודתיות, נזילות, פעילות on-chain, ריכוזיות מחזיקים. אילו משקלים אתם מחשיבים כעובדים והיכן הם חלוקים על המעשה.
- מטריקות נוכחיות. כיצד נוצרת כעת ההמלצה, כמה זמן אורך החישוב המחודש, איזה שיעור אותות מגיע למשתמש, והיכן מתועדים פערים מול החלטות ידניות של אנליטיקאים.
- תרחישי יעד. מה המערכת אמורה לספק: דירוג רשימה, הערכת סיכון לתיק, אות לכניסה או ליציאה. פורמט התשובה — מסך, תפוקה, התראה.
- מגבלות וכללים. דרישות ציות, כתבי ויתור, מגבלות אזוריות, היסטוריית החלטות לניתוח מקרים שנויים במחלוקת.
אם חלק מהנתונים חסר — תארו במילים; בשלב ההתחלה הוא יוחלף בתפוקה ידנית או בחתך היסטורי. שלחו את מה שיש: לפי מערך זה נחזור עם הערכת שעות העבודה, הרכב השלבים ותוכנית העבודה.







