הבעיה
מפעיל קזינו קריפטו עם 50,000 שחקנים פעילים ראה ירידה של 15% ב-GGR מרבעון לרבעון. הסיבה: בונוסים לא אופטימליים ו-RTP צף. ללא אנליטיקה מוצקה, הקזינו פועל בעיוורון—קמפיינים של בונוסים מדממים ללא שליטה, והנטישה עולה.
אנחנו בונים מערכות אנליטיקה לקזינו קריפטו שהופכות נתונים גולמיים להחלטות ניהוליות. הצוות שלנו כולל מהנדסי ClickHouse מוסמכים עם ניסיון של 5+ שנים באנליטיקת iGaming. סיפקנו 30+ פרויקטים המעבדים עד 10 מיליון הימורים ביום. לקוח אחד הפסיד 250,000 דולר בחודש בגלל בונוסים לא יעילים; לאחר היישום, ההפסד ירד ב-40%. במקרה אחר, ניטור RTP תפס באג בחוזה חכם, וחסך 75,000 דולר לרבעון. התחילו עם פיילוט—קבלו את המדדים הראשונים שלכם תוך שבועיים.
מה אנחנו פותרים
- הוצאות בונוס בלתי מבוקרות: ללא ייחוס נכון, בונוסים מנפחים עלויות. המערכת שלנו מקשרת כל בונוס ל-NGR של השחקן, כך שאתם רואים ROI מיידית.
- סטיית RTP נסתרת: בקזינו קריפטו, RTP על-רשת או מחוץ לרשת יכול לסטות מהערך הצפוי. אנו מזהים חריגות שמאותתות על שגיאות יישום או ניצול.
- ביצועי שאילתות איטיים: מסדי נתונים סטנדרטיים נחנקים על מיליוני שורות. ClickHouse מספק אגרגציות מהירות פי 10–50 מ-PostgreSQL.
איך אנחנו בונים את זה
הארכיטקטורה שלנו משתמשת בClickHouse עם מודל סכמת כוכב וצינורות ETL מבוססי Python. מסד הנתונים העמודי נותן האצה של פי 10–50 לאגרגציות. סכמת כוכב מפרידה עובדות (הימורים) מממדים (שחקנים, משחקים), מה שמפשט את קנה המידה. לוחות מחוונים בזמן אמת מספקים תמונה עסקית מלאה: מהפעלת משחק בודדת ועד מגמות גלובליות. פרויקט מאפס ועד ייצור לוקח מ-4 שבועות.
מדדי מפתח לאנליטיקת קזינו קריפטו
הנה ה-KPI שאנו עוקבים אחריהם:
| מדד | נוסחה / תיאור | מטרה |
|---|---|---|
| GGR | הימורים − זכיות | הכנסות גולמיות ממשחקים |
| NGR | GGR − בונוסים − החזרי עמלות | הכנסות נטו ממשחקים |
| RTP | (זכיות / הימורים) × 100% | החזר בפועל של המשחק |
| LTV | NGR צפוי לאורך חיי השחקן | ערך השחקן |
| שיעור נטישה | אחוז שחקנים שאבדו בתקופה | מעקב שימור |
GGR, NGR ו-RTP הם הבסיס. בלעדיהם, אי אפשר להעריך יעילות בונוסים, לזהות דליפות או לתכנן נזילות. לדוגמה, אם RTP של משבצת עולה על 100%, זה טריגר מיידי לביקורת חוזה.
בניית מחסן נתונים אנליטי יעיל
הארכיטקטורה האופטימלית היא סכמת כוכב על ClickHouse. בהשוואה ל-PostgreSQL, שאילתות אגרגציה רצות מהר פי 10–50 בזכות אחסון עמודי. מבנה לדוגמה:
-- Fact table: каждая ставка CREATE TABLE fact_bets ( bet_id String, user_id String, game_id String, session_id String, bet_time DateTime, amount Decimal(24, 8), currency LowCardinality(String), winnings Decimal(24, 8), ggr Decimal(24, 8), is_free_bet Bool, bonus_used Nullable(String), game_category LowCardinality(String), country LowCardinality(String), device_type LowCardinality(String), ) ENGINE = MergeTree() PARTITION BY toYYYYMM(bet_time) ORDER BY (user_id, bet_time); -- Dimension: игроки CREATE TABLE dim_users ( user_id String, registration_date Date, country LowCardinality(String), acquisition_channel LowCardinality(String), vip_level LowCardinality(String), first_deposit_date Nullable(Date), total_deposits Decimal(24, 8), total_withdrawals Decimal(24, 8), ) ENGINE = ReplacingMergeTree() ORDER BY user_id; תהליך ETL: מהימור ללוח מחוונים
כל שעה אנו אוספים נתונים גולמיים ממסד הנתונים התפעולי, הופכים אותם וטוענים ל-ClickHouse. צינור לדוגמה:
class CasinoAnalyticsETL: async def run_hourly_aggregation(self): now = datetime.utcnow() hour_start = now.replace(minute=0, second=0, microsecond=0) bets = await self.bet_repo.get_settled_bets_since(hour_start - timedelta(hours=1)) rows = [self.transform_bet(bet) for bet in bets] if rows: await self.clickhouse.insert('fact_bets', rows) await self.update_materialized_views() def transform_bet(self, bet: Bet) -> dict: return { "bet_id": str(bet.id), "user_id": str(bet.user_id), "game_id": bet.game_id, "bet_time": bet.settled_at, "amount": float(bet.amount), "currency": bet.currency, "winnings": float(bet.winnings), "ggr": float(bet.amount - bet.winnings), "is_free_bet": bet.is_free_bet, "game_category": bet.game_category, "country": bet.user_country, "device_type": bet.device_type, } תצוגות מחומרות מתעדכנות אוטומטית ומחזירות אגרגציות ללוחות מחוונים במילישניות. שגיאות ETL מתועדות ומעובדות עם מדיניות ניסיון חוזר.
שאילתות אנליטיות: קבוצות ו-RTP
ניתוח קבוצות שימור:
SELECT registration_cohort, days_since_registration, count(DISTINCT user_id) AS active_users, sum(ggr) AS cohort_ggr FROM ( SELECT b.user_id, toStartOfWeek(u.registration_date) AS registration_cohort, dateDiff('day', u.registration_date, b.bet_time) AS days_since_registration, b.ggr FROM fact_bets b JOIN dim_users u ON b.user_id = u.user_id WHERE b.bet_time >= now() - INTERVAL 180 DAY ) GROUP BY registration_cohort, days_since_registration ORDER BY registration_cohort, days_since_registration; ניתוח RTP לפי משחק:
SELECT game_id, game_category, count() AS bet_count, sum(amount) AS total_wagered, sum(winnings) AS total_paid, sum(ggr) AS total_ggr, sum(winnings) / sum(amount) AS actual_rtp, countIf(ggr < 0) AS losing_rounds, countIf(ggr >= 0) AS winning_rounds FROM fact_bets WHERE bet_time BETWEEN now() - INTERVAL 60 DAY AND now() AND NOT is_free_bet GROUP BY game_id, game_category ORDER BY total_wagered DESC; זיהוי חריגות בזמן אמת
שאילתה לפעילות חשודה:
SELECT user_id, count() AS bet_count, sum(winnings) / sum(amount) AS rtp, sum(ggr) AS user_ggr, max(winnings) AS max_single_win FROM fact_bets WHERE bet_time >= now() - INTERVAL 7 DAY GROUP BY user_id HAVING rtp > 1.5 AND bet_count > 50 ORDER BY rtp DESC LIMIT 100; אנו מחזקים זאת עם סף דינמי המבוסס על ממוצע נע של RTP. בפרויקט אחד, ניטור כזה תפס באג בחוזה חכם שנתן לקבוצת שחקנים RTP של 1.8—הפסד רבעוני של 75,000 דולר תוקן תוך יומיים.
השוואת כלי לוחות מחוונים
| כלי | סוג מדד | עומס לוח מחוונים | המלצה |
|---|---|---|---|
| Apache Superset | פיננסי, קבוצות | 1-2 שניות | אנליטיקה מורכבת ודוחות |
| Grafana | תפעולי, בזמן אמת | <1 שנייה | ניטור בזמן אמת |
| Metabase | פשוט, שירות עצמי | 2-4 שניות | צוותים קטנים |
מה כלול במערכת האנליטיקה
- ביקורת נתונים ודרישות קיימות—ניתוח מקורות, מבנה, איכות נתונים.
- עיצוב סכמת כוכב ו-ETL—מודל נתונים מותאם למדדים שלכם.
- פיתוח צינורות—איסוף, המרה, טעינה עם ניטור.
- תצוגות מחומרות—אגרגציות מראש ללוחות מחוונים מהירים.
- לוחות מחוונים—3 סטים: תפעולי (זמן אמת), פיננסי (GGR/NGR), קבוצות (LTV, שימור).
- תיעוד—סכמה, תיאורי לוחות מחוונים, מדריך להוספת משחקים חדשים.
- הדרכת צוות—2-3 מפגשים על שימוש במערכת.
- תמיכה ל-3 חודשים—תיקוני באגים, אופטימיזציית שאילתות, הוספת מדדים.
תהליך הפיתוח
- ביקורת נתונים ודרישות קיימות—שבוע אחד.
- עיצוב סכמת כוכב ו-ETL—1-2 שבועות.
- בניית צינורות ותצוגות מחומרות—2-3 שבועות.
- הקמת לוחות מחוונים (3 סוגים)—שבוע אחד.
- בדיקת דיוק מדדים וביצועים—3-4 ימים.
- הדרכת צוות ומסירת תיעוד—יומיים.
- תמיכה ל-3 חודשים—שיפורים, תיקוני באגים, אופטימיזציה.
הערכות לוחות זמנים
פיילוט בסיסי עם GGR, NGR, RTP ולוחות מחוונים פשוטים—משבועיים. מערכת מלאה עם ניתוח קבוצות, זיהוי הונאות ושילוב כל המשחקים—מ-4 עד 8 שבועות. לוחות זמנים מדויקים מוערכים באופן אישי לאחר איסוף דרישות.
צרו קשר להערכה ראשונית חינם של הפרויקט שלכם. הזמינו פיתוח מערכת אנליטיקה—קבלו מדדים שקופים ושליטה על העסק שלכם.







