Пошаговое руководство по созданию синтетических данных с использованием 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, предназначенный для автоматизации клиентских взаимодействий круглосуточно и управления взаимодействиями на всех этапах клиентского пути.