Itinai.com ai automation knolling flat lay business tools lap 0000ddae 8e6d 4c82 9fdf eb0c5ed90b01 3
Itinai.com ai automation knolling flat lay business tools lap 0000ddae 8e6d 4c82 9fdf eb0c5ed90b01 3

Создание синтетических данных с помощью Synthetic Data Vault: пошаговое руководство

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

ИИ Бизнес-инкубатор itinai.ru будет работать на вас. Получите свой цифровой продукт и готовую модель дохода

ИИ-агенты интеллектуальная автоматизация бизнеса

Готовые ИТ — решения для бизнеса

Новости в сфере искусственного интеллекта