Основи баз даних
VTFK • 2025
Лекція 16: Типи JOIN
Фокус: як БД і ML працюють разом
Практики які об'єднують розробку ML моделей з операціями (вибір даних, мониторинг, масштабування).
Аналогія: Як конвеєр: дані → обробка → модель → передбачення
Інтеграція з БД
Від БД до передбачення
# Крок 1: Вибрати дані з БД
query = """
SELECT user_id, item_id, rating
FROM ratings
WHERE created_at > DATE_SUB(NOW(), INTERVAL 1 YEAR)
"""
df = pd.read_sql(query, conn)
# Крок 2: Підготувати
df = df.fillna(0) # NULL → 0
# Крок 3: Тренувати модель
model = CollaborativeFiltering()
model.fit(df)
# Крок 4: Передбачити для користувача
recommendations = model.predict(user_id=123, n=5)
# Крок 5: Зберегти результати
save_to_db(recommendations)
Створюємо ознаки у БД
-- Готуємо дані прямо у SQL
SELECT
user_id,
(total_spent / order_count) AS avg_order_value,
DATEDIFF(NOW(), last_order_date) AS days_since_purchase,
CASE
WHEN total_spent > 1000 THEN 'VIP'
WHEN total_spent > 500 THEN 'Regular'
ELSE 'New'
END AS customer_segment
FROM users
WHERE active = true;
PostgreSQL + pgvector
-- Таблиця для зберігання ембеддингів
CREATE TABLE documents (
id BIGSERIAL PRIMARY KEY,
title VARCHAR(255),
content TEXT,
embedding vector(384) -- 384-вимірний вектор
);
-- Пошук найближчих текстів
SELECT title
FROM documents
ORDER BY embedding <-> query_embedding
LIMIT 5;
БД критична для тренування (历史 дані) та інференції (нові дані).
«грязні» дані = поганий модель
# НЕПРАВИЛЬНО: прямо у модель
data = db.query('SELECT * FROM users')
model.fit(data) # дані можуть мати NULL, дублікати
NULL та дублікати спотворюють результати
# ПРАВИЛЬНО: очистити спочатку
data = db.query('SELECT * FROM users')
data = data.fillna(0).drop_duplicates()
model.fit(data)
Data preparation критична
Від окремих до інтегрованих
BigData вперше
ML framework
MongoDB, Postgres
ML вбудована
End-to-end ML workflow
import pandas as pd
from sklearn.linear_model import LinearRegression
# Крок 1: Вибір
query = "SELECT user_id, age, spending FROM users WHERE active=true"
df = pd.read_sql(query, db_conn)
# Крок 2: Очистка
df = df.dropna()
# Крок 3: Тренування
X = df[['age']]
y = df['spending']
model = LinearRegression()
model.fit(X, y)
# Крок 4: Предикт
new_age = 30
predicted_spending = model.predict([[new_age]])
# Крок 5: Зберігання
db_conn.execute(
'INSERT INTO predictions VALUES (?, ?)',
(new_age, predicted_spending)
)
Далі — GROUP BY та аналіз даних
Лекція 18: GROUP BY & Window Functions
Дякую за увагу! 💾