נתונים טבלאיים סינתטיים ל-ML: יצירה, קוד, אימות

לעיתים קרובות לא ניתן להשתמש בנתונים אמיתיים בשל GDPR, HIPAA או מדיניות ארגונית, מה שמאט את פיתוח מודלי ה-ML. אנו מייצרים נתונים טבלאיים סינתטיים השומרים על התכונות הסטטיסטיות של המקור תוך ביטול סיכוני דליפה. הצוות שלנו מספק את הפרויקט במפתח מלא—מייצור וקוד ועד walidacja—עם תמיכה מתמשכת.

תחומי פיתוח AI

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1365
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

איסוף נתונים אמיתיים ל-ML נתקל לא פעם במגבלות רגולציה: GDPR, HIPAA או מדיניות ארגונית אוסרות על העברת מערכי נתונים גולמיים למפתחים. בפרויקט עם עסקאות בנקאיות, לא יכולנו להשתמש ברשומות אמיתיות — נאלצנו לייצר נתונים סינתטיים המשמרים התפלגויות ומתאמים עד ערך p של KS > 0.4. נתונים סינתטיים פותרים בעיה זו: מרחיבים מערכי נתונים, מאזנים מחלקות (למשל, הופכים 1% עסקאות הונאה ל-50%), ובודקים מודלים ללא סיכון פרצה. בעבודתנו, יישמנו יצירה עבור 15+ פרויקטים בפיננסים, בריאות וקמעונאות. כל פרויקט דורש גישה אישית — אין פתרון אוניברסלי. הבעיה חריפה במיוחד עם מערכי נתונים לא מאוזנים: אם מחלקת היעד היא פחות מ-1%, ללא נתונים סינתטיים אי אפשר לאמן מודל. אנו משתמשים ב-CTGAN עם דגימה מותנית כדי לייצר דוגמאות של המחלקה הנדרשת בפרופורציה הנכונה. חיסכון באיסוף נתונים — עד 40%, ובביקורת רגולציה — עד 30%.

מדוע נתונים טבלאיים סינתטיים נחוצים ל-ML?

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

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

CTGAN משתמש בוקטור מותנה הקובע את היחס הרצוי של קטגוריות במערך הנתונים שנוצר. לדוגמה, לזיהוי הונאה אנו קובעים את חלקם של עסקאות ההונאה על 50% — זה משפר בחדות את רמת ה-recall של המודל. המחולל והמבחין מתחרים: הראשון לומד ליצור רשומות מציאותיות, השני להבחין בינן לבין אמיתיות. כתוצאה מכך, התפלגויות ומתאמים נשמרים בדיוק גבוה. לנתונים פיננסיים, ערך p טיפוסי של KS עבור תכונות מספריות הוא 0.2–0.6.

בחירת שיטת יצירה — נתונים טבלאיים סינתטיים

הבחירה תלויה בסוג הנתונים ובדרישות הפרטיות. על סמך ניסיוננו:

שיטה מהירות איכות פרטיות מתאימה ל
Gaussian Copula מהירה טובה גבוהה נתונים מספריים, התפלגויות נורמליות
CTGAN איטית מצוינת בינונית קטגוריים + מספריים
TVAE בינונית מצוינת בינונית ממדיות גבוהה
REaLTabFormer איטית עליונה דורש DP תלות מורכבת

Gaussian Copula עובדת פי 10 מהר יותר מ-CTGAN, אך CTGAN משמרת טוב יותר התפלגויות מולטי-מודליות מורכבות. למחלקות לא מאוזנות, CTGAN מבטיחה יחס מחלקות מדויק לאחר היצירה באמצעות וקטור מותנה. אנו מכוונים היפרפרמטרים (embedding_dim, generator_dim) עבור כל מערך נתונים — ניצול GPU מגיע ל-90% לכל epoch.

כיצד לשפר את איכות הנתונים הסינתטיים עם fine-tuning

כיוונון עדין של מודל גנרטיבי על תחום ספציפי משפר את האיכות. לנתונים רפואיים, אנו מבצעים fine-tuning ל-CTGAN מאומן מראש במשך 10 epochs עם קצב למידה מופחת. תוצאה: ערך p של KS משתפר מ-0.05 ל-0.4. עם זאת, חשוב לא לבצע overfitting — אנו משתמשים ב-early stopping המבוסס על מדדי SDMetrics. עבור כל פרויקט, אנו יוצרים כרטיס מודל המתעד היפרפרמטרים, מדדים ותנאי יצירה.

כיצד להעריך את איכות הנתונים הסינתטיים

ולידציה היא שלב מפתח. אנו משתמשים ב-SDMetrics ו-scipy כדי לבדוק התפלגויות ומתאמים. המטרה היא שנתונים סינתטיים יהיו בלתי ניתנים להבחנה סטטיסטית מאמיתיים (ערך p > 0.05).

from scipy.stats import ks_2samp
import matplotlib.pyplot as plt

def validate_synthetic_quality(real: pd.DataFrame, synthetic: pd.DataFrame) -> dict:
    results = {}
    for col in real.select_dtypes(include=np.number).columns:
        ks_stat, p_value = ks_2samp(real[col].dropna(), synthetic[col].dropna())
        results[col] = {
            'real_mean': real[col].mean(),
            'synthetic_mean': synthetic[col].mean(),
            'real_std': real[col].std(),
            'synthetic_std': synthetic[col].std(),
            'ks_stat': ks_stat,
            'distribution_match': p_value > 0.05
        }
    real_corr = real.select_dtypes(np.number).corr()
    synth_corr = synthetic.select_dtypes(np.number).corr()
    corr_diff = (real_corr - synth_corr).abs().mean().mean()
    results['correlation_mae'] = corr_diff
    return results

ספי איכות טיפוסיים הניתנים להשגה בפועל:

מדד ערך יעד תוצאה טיפוסית (CTGAN)
ערך p של KS (מספרי) > 0.05 0.10–0.60
MAE של מתאם < 0.05 0.02–0.04
כיסוי קטגוריות > 95% 98–100%

לרוב משימות ה-ML, נתונים סינתטיים שנוצרו על ידי CTGAN עם ציון > 0.85 ב-SDMetrics מאפשרים השגת 95–98% מאיכות המודל בהשוואה לאימון על נתונים אמיתיים באותו נפח.

הרחב דוגמת קוד CTGAN
import pandas as pd
from ctgan import CTGAN
import numpy as np

def train_ctgan_synthesizer(
    data: pd.DataFrame,
    discrete_columns: list,
    epochs: int = 300
) -> CTGAN:
    synthesizer = CTGAN(
        embedding_dim=128,
        generator_dim=(256, 256),
        discriminator_dim=(256, 256),
        batch_size=500,
        epochs=epochs,
        verbose=True,
        pac=10,
    )
    synthesizer.fit(data, discrete_columns=discrete_columns)
    return synthesizer

financial_data = pd.read_parquet("transactions.parquet")
discrete_cols = ['merchant_category', 'transaction_type', 'currency', 'is_fraud']
synth = train_ctgan_synthesizer(financial_data, discrete_cols)
n_real = len(financial_data)
synthetic = synth.sample(n_real * 5)
print(f"Real fraud rate: {financial_data['is_fraud'].mean():.4f}")
print(f"Synthetic fraud rate: {synthetic['is_fraud'].mean():.4f}")

CTGAN: Modeling Tabular Data using Conditional GAN (Xu et al., 2019)

מתי ולידציה קריטית: טעויות טיפוסיות

  • Overfitting של המחולל: אם המודל שינן רשומות אמיתיות, ערך p של KS גבוה באופן חריג (> 0.9). בדוק כפילויות.
  • בחירת מדד שגויה: מבחן KS לבדו אינו מספיק — הקפד לבדוק גם MAE של מתאם וכיסוי קטגוריות.
  • התעלמות מסוגי נתונים: תכונות קטגוריות עם ערכים נדירים דורשות הגדלת batch_size ו-epochs.

מה כולל פיתוח צינור נתונים סינתטיים?

אנו מציעים מחזור עבודה מלא:

  1. ניתוח מערך נתונים: הערכת התפלגויות, מתאמים, ערכים חסרים וחריגים.
  2. בחירה וכיוונון מודל: בחירת ארכיטקטורה (CTGAN, TVAE, Gaussian Copula) והיפרפרמטרים.
  3. אימון וולידציה: שימוש ב-SDMetrics, מבחני KS, ניתוח מתאמים.
  4. אינטגרציה: יצירת צינור על Airflow או Docker, API ליצירה.
  5. תיעוד: כרטיס מודל עם מדדים, מדריך הפעלה, דוח איכות.
  6. הכשרת צוות: סדנה על שימוש בסינתיסייזר ופרשנות מדדים.
  7. תמיכה באחריות: שבועיים לאחר היישום.

לוחות זמנים — בין 2 ל-4 שבועות בהתאם למורכבות מערך הנתונים. העלות מחושבת באופן אישי. קבל ייעוץ לבחירת שיטת יצירה עבור מערך הנתונים שלך — צור קשר. הזמן פיתוח צינור עבור הנתונים שלך.