AI и Data Science: связь и различия

Data Science — междисциплинарная область, извлекающая знания из данных с помощью статистики, ML и программирования.

AI — системы, имитирующие когнитивные функции человека.

┌─────────────────────────────────────────────────────────────┐
│                      Data Science                           │
│  ┌───────────────────────────────────────────────────────┐ │
│  │              Machine Learning                          │ │
│  │  ┌─────────────────────────────────────────────────┐  │ │
│  │  │              Deep Learning                       │  │ │
│  │  │  ┌─────────────────────────────────────────┐    │  │ │
│  │  │  │         Generative AI (LLM)             │    │  │ │
│  │  │  └─────────────────────────────────────────┘    │  │ │
│  │  └─────────────────────────────────────────────────┘  │ │
│  └───────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
ОбластьФокусТипичные задачи
Data ScienceАнализ и insightsBI, визуализация, A/B тесты
ML EngineeringМодели в productionMLOps, serving, мониторинг
AI EngineeringAI-системыLLM интеграция, агенты, RAG

Терминология Data Science

Базовые понятия

ТерминОпределение
DatasetСтруктурированный набор данных для анализа/обучения
FeatureПризнак, входная переменная модели
TargetЦелевая переменная, которую предсказываем
Training setДанные для обучения модели
Test setДанные для оценки качества
Validation setДанные для подбора гиперпараметров

Типы данных

Structured (табличные)
├── Числовые (continuous, discrete)
├── Категориальные (nominal, ordinal)
└── Временные ряды

Unstructured
├── Текст (NLP)
├── Изображения (CV)
├── Аудио
└── Видео

Semi-structured
├── JSON, XML
└── Графы

Метрики качества

Для классификации

МетрикаФормулаПрименение
Accuracy(TP + TN) / TotalСбалансированные классы
PrecisionTP / (TP + FP)Важна точность положительных
RecallTP / (TP + FN)Важно не пропустить положительные
F1-score2 * (P * R) / (P + R)Баланс precision/recall
ROC-AUCArea under ROC curveОбщее качество классификатора

Для регрессии

МетрикаОписание
MAEMean Absolute Error
MSEMean Squared Error
RMSERoot Mean Squared Error
Коэффициент детерминации

Data Science Pipeline

Классический CRISP-DM

┌─────────────────┐
│ Business        │
│ Understanding   │
└────────┬────────┘
         │
         ▼
┌─────────────────┐     ┌─────────────────┐
│ Data            │────►│ Data            │
│ Understanding   │     │ Preparation     │
└────────┬────────┘     └────────┬────────┘
         │                       │
         │              ┌────────▼────────┐
         │              │    Modeling     │
         │              └────────┬────────┘
         │                       │
         │              ┌────────▼────────┐
         └─────────────►│   Evaluation    │
                        └────────┬────────┘
                                 │
                        ┌────────▼────────┐
                        │   Deployment    │
                        └─────────────────┘

Современный ML Pipeline

Data Ingestion → Feature Engineering → Training → Evaluation → Deployment → Monitoring
      │                  │                │           │             │            │
      ▼                  ▼                ▼           ▼             ▼            ▼
   Kafka,            Spark,           PyTorch,    MLflow,      Kubernetes,   Prometheus,
   Airflow           dbt              TensorFlow  W&B          Seldon        Grafana

Инструменты Data Science

Языки и среды

ИнструментНазначение
PythonОсновной язык DS/ML
RСтатистический анализ
SQLРабота с данными
JupyterИнтерактивная разработка

Python-экосистема

Data Manipulation     Visualization      ML/DL
├── NumPy            ├── Matplotlib     ├── scikit-learn
├── Pandas           ├── Seaborn        ├── PyTorch
├── Polars           ├── Plotly         ├── TensorFlow
└── Dask             └── Altair         └── XGBoost

NLP                   Computer Vision    MLOps
├── HuggingFace      ├── OpenCV         ├── MLflow
├── spaCy            ├── torchvision    ├── DVC
├── NLTK             └── Pillow         ├── Weights & Biases
└── LangChain                           └── Kubeflow

Платформы и облака

ПлатформаОсобенности
DatabricksUnified analytics, Spark
SnowflakeData warehouse, ML features
AWS SageMakerEnd-to-end ML платформа
GCP Vertex AIAutoML, ML pipelines
Azure MLEnterprise ML

Feature Engineering

Техники обработки признаков

Числовые признаки

# Нормализация (0-1)
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
X_scaled = scaler.fit_transform(X)
 
# Стандартизация (mean=0, std=1)
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
 
# Log-трансформация для скошенных распределений
import numpy as np
X_log = np.log1p(X)

Категориальные признаки

# One-Hot Encoding
from sklearn.preprocessing import OneHotEncoder
encoder = OneHotEncoder(sparse=False)
X_encoded = encoder.fit_transform(X[['category']])
 
# Label Encoding (для ordinal)
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
X['category_encoded'] = le.fit_transform(X['category'])
 
# Target Encoding
import category_encoders as ce
encoder = ce.TargetEncoder(cols=['category'])
X_encoded = encoder.fit_transform(X, y)

Работа с пропусками

СтратегияПрименение
УдалениеМалая доля пропусков (<5%)
Среднее/МедианаЧисловые признаки
МодаКатегориальные признаки
KNN ImputerСложные зависимости
Отдельная категория”Unknown” для категорий

Exploratory Data Analysis (EDA)

Чек-лист EDA

## 1. Обзор данных
- [ ] Размерность (rows, columns)
- [ ] Типы данных
- [ ] Пропущенные значения
- [ ] Дубликаты
 
## 2. Univariate Analysis
- [ ] Распределения числовых признаков
- [ ] Частоты категориальных
- [ ] Выбросы (outliers)
 
## 3. Bivariate Analysis
- [ ] Корреляции между признаками
- [ ] Зависимости с target
- [ ] Категориальные vs числовые
 
## 4. Multivariate Analysis
- [ ] PCA / t-SNE визуализация
- [ ] Кластеризация
- [ ] Feature importance

Код для быстрого EDA

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
 
# Обзор
df.info()
df.describe()
df.isnull().sum()
 
# Распределения
df.hist(figsize=(12, 8))
plt.tight_layout()
 
# Корреляции
plt.figure(figsize=(10, 8))
sns.heatmap(df.corr(), annot=True, cmap='coolwarm')
 
# Категориальные
for col in df.select_dtypes(include='object'):
    df[col].value_counts().plot(kind='bar')
    plt.title(col)
    plt.show()

ML для разработчиков

Быстрый старт с scikit-learn

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report
 
# Разделение данных
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)
 
# Обучение
model = RandomForestClassifier(n_estimators=100)
model.fit(X_train, y_train)
 
# Оценка
y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))

AutoML инструменты

ИнструментОсобенности
AutoGluonЛучший для табличных данных
H2O AutoMLEnterprise-ready
TPOTГенетические алгоритмы
Auto-sklearnНа основе sklearn
PyCaretLow-code ML
# Пример AutoGluon
from autogluon.tabular import TabularPredictor
 
predictor = TabularPredictor(label='target').fit(train_data)
predictions = predictor.predict(test_data)

LLM и Data Science

Применение LLM в DS

ЗадачаПодход
Анализ данныхКод-ассистенты (Copilot, Claude)
EDAГенерация кода для визуализаций
Feature EngineeringПредложение новых признаков
ДокументацияАвтогенерация описаний
Text AnalyticsZero-shot классификация, NER

LLM для текстовых данных

from langchain_anthropic import ChatAnthropic
from langchain.prompts import PromptTemplate
 
llm = ChatAnthropic(model="claude-3-sonnet-20240229")
 
# Классификация тональности
prompt = PromptTemplate(
    input_variables=["text"],
    template="Classify sentiment: {text}\nSentiment:"
)
 
# Извлечение сущностей
prompt = PromptTemplate(
    input_variables=["text"],
    template="Extract named entities (person, org, location): {text}"
)

Синтетические данные

LLM для генерации данных:

prompt = """Generate 10 synthetic customer reviews for a
software product. Include both positive and negative reviews.
Format: JSON array with fields: text, rating (1-5)"""
 
synthetic_data = llm.invoke(prompt)

Ссылки