Пошаговое руководство по созданию синтетических данных с использованием Synthetic Data Vault (SDV)
Данные из реального мира часто представляют собой высокие затраты, неразбериху и ограничения по правилам конфиденциальности. Синтетические данные предлагают решение и уже широко используются в различных приложениях, таких как обучение больших языковых моделей (LLMs) с помощью текста, созданного ИИ, моделирование крайних случаев для систем обнаружения мошенничества и предобучение моделей зрения на искусственных изображениях.
Установка библиотеки SDV
Для начала необходимо установить библиотеку SDV:
pip install sdv
Чтение набора данных
Импортируем необходимые модули и подключаемся к локальной папке с файлами набора данных. Мы читаем CSV-файлы и сохраняем их как DataFrames в pandas. Основной набор данных доступен через data['data'].
from sdv.io.local import CSVHandler connector = CSVHandler() FOLDER_NAME = '.' # Если данные находятся в той же директории data = connector.read(folder_name=FOLDER_NAME) salesDf = data['data']
Импорт метаданных
Теперь мы импортируем метаданные для нашего набора данных, которые хранятся в JSON-файле и описывают, как интерпретировать ваши данные. Включает:
- Имя таблицы
- Первичный ключ
- Тип данных каждого столбца (например, категориальный, числовой, дата и время)
- Опциональные форматы столбцов, такие как шаблоны даты и времени
- Связи таблиц (для многотабличных настроек)
{
"METADATA_SPEC_VERSION": "V1",
"tables": {
"your_table_name": {
"primary_key": "your_primary_key_column",
"columns": {
"your_primary_key_column": { "sdtype": "id", "regex_format": "T[0-9]{6}" },
"date_column": { "sdtype": "datetime", "datetime_format": "%d-%m-%Y" },
"category_column": { "sdtype": "categorical" },
"numeric_column": { "sdtype": "numerical" }
},
"column_relationships": []
}
}
}
Автоматическое обнаружение метаданных
Также можно использовать библиотеку SDV для автоматического определения метаданных. Однако результаты могут быть не всегда точными, поэтому вам может понадобиться проверить и обновить их в случае несоответствий:
from sdv.metadata import Metadata metadata = Metadata.detect_from_dataframes(data)
Генерация синтетических данных
Теперь, когда метаданные и оригинальный набор данных готовы, мы можем использовать SDV для обучения модели и генерации синтетических данных. Модель изучает структуру и шаблоны вашего реального набора данных и использует эти знания для создания синтетических записей. Вы можете контролировать, сколько строк генерировать, используя аргумент num_rows:
from sdv.single_table import GaussianCopulaSynthesizer synthesizer = GaussianCopulaSynthesizer(metadata) synthesizer.fit(data=salesDf) synthetic_data = synthesizer.sample(num_rows=10000)
Оценка качества синтетических данных
Библиотека SDV предоставляет инструменты для оценки качества ваших синтетических данных, сравнивая их с оригинальным набором данных. Хорошей отправной точкой будет создание отчета о качестве:
from sdv.evaluation.single_table import evaluate_quality
quality_report = evaluate_quality(
salesDf,
synthetic_data,
metadata)
Вы также можете визуализировать, как синтетические данные соотносятся с реальными данными, используя встроенные инструменты визуализации SDV.
Визуализация средних месячных тенденций продаж
Мы можем дополнительно проанализировать данные, визуализируя средние месячные тенденции продаж для обоих наборов данных:
import pandas as pd
import matplotlib.pyplot as plt
# Убедитесь, что столбцы 'Date' имеют тип даты и времени
salesDf['Date'] = pd.to_datetime(salesDf['Date'], format='%d-%m-%Y')
synthetic_data['Date'] = pd.to_datetime(synthetic_data['Date'], format='%d-%m-%Y')
# Извлекаем 'Month' как строку год-месяц
salesDf['Month'] = salesDf['Date'].dt.to_period('M').astype(str)
synthetic_data['Month'] = synthetic_data['Date'].dt.to_period('M').astype(str)
# Группируем по 'Month' и вычисляем средние продажи
actual_avg_monthly = salesDf.groupby('Month')['Sales'].mean().rename('Actual Average Sales')
synthetic_avg_monthly = synthetic_data.groupby('Month')['Sales'].mean().rename('Synthetic Average Sales')
# Объединяем две серии в DataFrame
avg_monthly_comparison = pd.concat([actual_avg_monthly, synthetic_avg_monthly], axis=1).fillna(0)
# График
plt.figure(figsize=(10, 6))
plt.plot(avg_monthly_comparison.index, avg_monthly_comparison['Actual Average Sales'], label='Средние продажи (Фактические)', marker='o')
plt.plot(avg_monthly_comparison.index, avg_monthly_comparison['Synthetic Average Sales'], label='Средние продажи (Синтетические)', marker='o')
plt.title('Сравнение средних месячных продаж: Фактические против Синтетических')
plt.xlabel('Месяц')
plt.ylabel('Средние продажи')
plt.xticks(rotation=45)
plt.grid(True)
plt.legend()
plt.ylim(bottom=0) # ось y начинается с 0
plt.tight_layout()
plt.show()
Этот график демонстрирует, что средние месячные продажи в обоих наборах данных очень похожи, с минимальными различиями.
Заключение
В этом руководстве мы показали, как подготовить ваши данные и метаданные для генерации синтетических данных с использованием библиотеки SDV. Обучая модель на вашем оригинальном наборе данных, SDV может создать высококачественные синтетические данные, которые близки к шаблонам и распределениям реальных данных. Мы также исследовали способы оценки и визуализации синтетических данных, подтверждая, что ключевые метрики, такие как распределения продаж и месячные тенденции, остаются последовательными. Синтетические данные предлагают мощный способ преодоления проблем конфиденциальности и доступности, позволяя проводить надежный анализ данных и рабочие процессы машинного обучения.
Свяжитесь с нами по адресу hello@itinai.ru, если вам нужна помощь в управлении ИИ в бизнесе. Чтобы оставаться в курсе последних новостей ИИ, подписывайтесь на наш Telegram тут.
Пример решения на базе ИИ
Посмотрите на практический пример решения на базе ИИ: бот для продаж от itinai.ru/aisales, предназначенный для автоматизации клиентских взаимодействий круглосуточно и управления взаимодействиями на всех этапах клиентского пути.






















