Оценка эффективности рекомендательных моделей делится на точностные и ранговые метрики.
Формула
RMSE = \sqrt{\frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2}Пример
from sklearn.metrics import mean_squared_error
import numpy as np
y_true = np.array([4, 3, 5, 2])
y_pred = np.array([3.8, 2.9, 5.1, 2.2])
rmse = np.sqrt(mean_squared_error(y_true, y_pred))
print(f'RMSE: {rmse}')
Формула
MAE = \frac{1}{n} \sum_{i=1}^{n} |y_i - \hat{y}_i|Пример
from sklearn.metrics import mean_absolute_error
y_true = np.array([4, 3, 5, 2])
y_pred = np.array([3.8, 2.9, 5.1, 2.2])
mae = mean_absolute_error(y_true, y_pred)
print(f'MAE: {mae}')
Precision@K: Доля релевантных элементов среди первых K предложений.
Recall@K: Доля найденных релевантных элементов среди всех возможных релевантных.
Пример
def precision_at_k(recommended_items, relevant_items, k):
return len(set(recommended_items[:k]) & set(relevant_items)) / k
def recall_at_k(recommended_items, relevant_items, k):
return len(set(recommended_items[:k]) & set(relevant_items)) / len(relevant_items)
recommended_items = [1, 2, 3, 4, 5]
relevant_items = [3, 4, 5, 6, 7]
k = 3
print(f'Precision@{k}: {precision_at_k(recommended_items, relevant_items, k)}')
print(f'Recall@{k}: {recall_at_k(recommended_items, relevant_items, k)}')
Пример
def average_precision(recommended_items, relevant_items):
score = 0.0
num_hits = 0.0
for i, item in enumerate(recommended_items):
if item in relevant_items:
num_hits += 1.0
score += num_hits / (i + 1.0)
return score / len(relevant_items)
def mean_average_precision(recommended_items_list, relevant_items_list):
return np.mean([average_precision(r, t) for r, t in zip(recommended_items_list, relevant_items_list)])
recommended_items_list = [[1, 2, 3, 4, 5], [2, 3, 4, 5, 6]]
relevant_items_list = [[3, 4, 5, 6, 7], [1, 2, 3, 4, 5]]
print(f'MAP: {mean_average_precision(recommended_items_list, relevant_items_list)}')
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1🤔1💊1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2👍1
Методы обнаружения аномалий включают статистический анализ, машинное обучение и методы на основе правил. Статистические методы используют отклонения от нормальных распределений, машинное обучение опирается на кластеризацию или нейронные сети, а методы на основе правил выявляют отклонения от заданных шаблонов. Выбор подхода зависит от сложности данных и целей анализа.
Z-оценка (Z-score): Измеряет количество стандартных отклонений от среднего. Применимо для данных с нормальным распределением.Метод межквартильного размаха (IQR): Использует квартильные размахи для определения выбросов.
Методы без учителя
K-Means: Кластеризует данные, выделяя аномалии на основе удаленности от центроидов. DBSCAN: Определяет аномалии на основе плотности данных. One-Class SVM: Обучается на одном классе данных, выделяя аномалии. Isolation Forest: Быстро изолирует аномальные точки с помощью случайных деревьев.
from sklearn.ensemble import IsolationForest
X_train = ...
clf = IsolationForest(contamination=0.1)
clf.fit(X_train)
y_pred = clf.predict(X_train)
Используются при наличии размеченных данных (логистическая регрессия, решающие деревья и т.д.).
Методы скользящего окна (Moving Average)
Выявляют аномалии путем анализа средних значений за периоды.
Методы автокорреляции
Анализируют повторяющиеся шаблоны во временных рядах.
Нейронные сети, кодирующие данные в низкоразмерное пространство и декодирующие их обратно. Высокие ошибки восстановления указывают на аномалии.
from keras.models import Model, Sequential
from keras.layers import Dense, Input
input_dim = X_train.shape[1]
encoding_dim = 14
input_layer = Input(shape=(input_dim, ))
encoder = Dense(encoding_dim, activation="tanh")(input_layer)
encoder = Dense(int(encoding_dim / 2), activation="relu")(encoder)
decoder = Dense(int(encoding_dim / 2), activation="tanh")(encoder)
decoder = Dense(input_dim, activation="relu")(decoder)
autoencoder = Model(inputs=input_layer, outputs=decoder)
autoencoder.compile(optimizer="adam", loss="mean_squared_error")
autoencoder.fit(X_train, X_train, epochs=100, batch_size=32, shuffle=True, validation_split=0.1)
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
В задачах многоклассовой классификации (multi-class classification) метрики производительности можно агрегировать различными способами.
Агрегирует вклад всех классов, рассматривая каждый истинный или предсказанный пример как единицу. Оно вычисляется путем суммирования истинно положительных, ложно положительных и ложно отрицательных сработок для всех классов и затем использования этих сумм для вычисления метрики.
from sklearn.metrics import precision_score, recall_score, f1_score
# y_true - истинные метки классов
# y_pred - предсказанные метки классов
precision_micro = precision_score(y_true, y_pred, average='micro')
recall_micro = recall_score(y_true, y_pred, average='micro')
f1_micro = f1_score(y_true, y_pred, average='micro')
print(f"Micro Precision: {precision_micro}")
print(f"Micro Recall: {recall_micro}")
print(f"Micro F1-Score: {f1_micro}")
Вычисляет метрики для каждого класса отдельно, а затем усредняет их. Этот метод не учитывает дисбаланс классов, так как каждому классу придается одинаковый вес.
precision_macro = precision_score(y_true, y_pred, average='macro')
recall_macro = recall_score(y_true, y_pred, average='macro')
f1_macro = f1_score(y_true, y_pred, average='macro')
print(f"Macro Precision: {precision_macro}")
print(f"Macro Recall: {recall_macro}")
print(f"Macro F1-Score: {f1_macro}")
Вычисляет метрики для каждого класса отдельно, но взвешивает их по числу истинных экземпляров в каждом классе. Это позволяет учитывать дисбаланс классов.
precision_weighted = precision_score(y_true, y_pred, average='weighted')
recall_weighted = recall_score(y_true, y_pred, average='weighted')
f1_weighted = f1_score(y_true, y_pred, average='weighted')
print(f"Weighted Precision: {precision_weighted}")
print(f"Weighted Recall: {recall_weighted}")
print(f"Weighted F1-Score: {f1_weighted}")
Можно также рассчитывать метрики отдельно для каждого класса. Это полезно для анализа производительности модели по каждому классу.
import numpy as np
from sklearn.metrics import precision_recall_fscore_support
precision, recall, f1, _ = precision_recall_fscore_support(y_true, y_pred, average=None, labels=np.unique(y_true))
for i, label in enumerate(np.unique(y_true)):
print(f"Class {label}: Precision = {precision[i]}, Recall = {recall[i]}, F1-Score = {f1[i]}")
Для многоклассовой классификации представляет собой квадратную матрицу, где строки соответствуют истинным классам, а столбцы — предсказанным классам.
from sklearn.metrics import confusion_matrix
conf_matrix = confusion_matrix(y_true, y_pred)
print("Confusion Matrix:")
print(conf_matrix)
Вычисляется как доля правильных предсказаний среди всех предсказаний.
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y_true, y_pred)
print(f"Overall Accuracy: {accuracy}")
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
1. Нормально распределёнными.
2. Иметь одинаковую дисперсию между группами.
Если эти условия не выполняются, используют его модификации или непараметрические тесты.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Представление модели пожизненной ценности клиента (LTV) для бизнеса требует чёткого понимания целей бизнеса, практической значимости модели и способности переводить технические детали в понятные и полезные бизнес-инсайты.
Начните с объяснения, для чего была разработана модель LTV и какие бизнес-процессы она может улучшить. Это может быть повышение ROI маркетинговых кампаний, оптимизация взаимодействия с клиентами, повышение удержания клиентов или более эффективное распределение ресурсов.
Опишите, какие данные были использованы для обучения модели, какие методы машинного обучения применялись, и как производилась валидация результатов. Объясните выбор определённых переменных и их влияние на прогнозы LTV.
Используйте визуализации для демонстрации работы модели. Графики, такие как ROC-кривые, диаграммы распределения LTV или сравнения реальных и предсказанных значений LTV, могут помочь наглядно представить эффективность модели. Также покажите, как модель справляется с различными сегментами клиентов.
Объясните, как использование модели LTV может привести к конкретным бизнес-преимуществам. Приведите примеры улучшений: например, на сколько увеличилась рентабельность за счёт оптимизации маркетинговых затрат или как повысилась общая прибыль за счет более точного прогнозирования поведения клиентов.
Опишите, как модель можно интегрировать в текущие бизнес-процессы. Предложите конкретные шаги для внедрения модели, включая необходимые изменения в IT-инфраструктуре, процессы обработки данных и требования к персоналу.
Не упустите возможность обсудить потенциальные ограничения модели и возможные риски, связанные с её использованием. Это может включать данные, которые могут стать устаревшими, потенциальное переобучение модели или вопросы, связанные с конфиденциальностью данных.
Модели машинного обучения требуют регулярного обновления для поддержания актуальности. Опишите процесс регулярного пересмотра и обновления модели, включая сбор новых данных, повторную оценку модели и адаптацию к изменяющимся рыночным условиям.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊1
2. Post-pruning: удаление "слабых" ветвей после построения дерева для улучшения обобщения.
3. Метрики, такие как ошибка на валидационной выборке, помогают оценить, какие ветви обрезать.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Ключевое слово yield используется для создания генератора, который является разновидностью итератора. В отличие от обычных функций, которые возвращают значения с помощью
return и завершают своё выполнение, функции с yield возвращают генератор, который при каждом вызове продолжает выполнение функции с того места, где было сделано последнее yield.Генераторы вычисляют значения по требованию (lazy evaluation), что позволяет им обрабатывать даже очень большие последовательности данных, не загружая всю последовательность в память. Это особенно полезно для обработки больших файлов или потоков данных.
Функции с
yield удобны, когда нужно управлять сложным состоянием внутри функции. Функция может "замораживать" своё состояние между вызовами и продолжать выполнение с того места, где она остановилась.Создание итератора с помощью
yield значительно упрощается по сравнению с классами итераторов, которые требуют определения методов __iter__() и __next__().def fibonacci(n):
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b
# Создание генератора для первых 10 чисел Фибоначчи
fib_gen = fibonacci(10)
# Итерация по генератору
for num in fib_gen:
print(num)
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Дизайн эксперимента для проверки работы рекомендательной системы с разделением пользователей по геопозиции может включать несколько ключевых этапов, в том числе подготовку данных, разделение пользователей, разработку и оценку рекомендательной модели.
Перед началом эксперимента необходимо четко определить, что именно вы хотите изучить или доказать. Например, вы можете проверить, улучшится ли качество рекомендаций при использовании географических данных.
Для проведения эксперимента необходимо собрать достаточное количество данных о пользователях, включая их географическое положение и историю взаимодействий с продуктом. Данные должны быть предварительно обработаны для удаления ошибок и пропусков.
Пользователи делятся на группы согласно их геопозиции. Например, можно разделить их на регионы: Север, Юг, Запад, Восток. Важно, чтобы в каждой группе было достаточно пользователей для статистической значимости результатов.
Разрабатывается рекомендательная модель, которая может использовать географическую информацию для улучшения качества рекомендаций. Например, модель может предпочитать рекомендовать продукты или услуги, популярные в том же географическом регионе.
Разработанная модель тестируется на разных группах пользователей. Можно провести A/B-тестирование, где одной группе показываются рекомендации без учета геопозиции, а другой — с учетом. Также можно сравнить работу модели на разных географических группах.
Результаты эксперимента анализируются на предмет различий в эффективности рекомендаций. Особое внимание уделяется метрикам, таким как точность, полнота, и другие релевантные показатели качества рекомендаций.
На основе анализа данных делаются выводы о том, насколько эффективно использование геопозиции улучшает качество рекомендаций.
# Пример кода для разделения пользователей по геопозиции и подготовки данных
import pandas as pd
# Загрузка данных
data = pd.read_csv('user_data.csv')
# Предполагаем, что у нас есть колонки 'user_id', 'region' и 'interaction'
# Разделение данных по регионам
groups = data.groupby('region')
# Пример создания модели и оценки для каждой группы
for region, group_data in groups:
train, test = train_test_split(group_data, test_size=0.2)
model = train_model(train)
results = evaluate_model(model, test)
print(f"Результаты для региона {region}: {results}")
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Хэшируемые типы данных, такие как числа, строки, кортежи с неизменяемыми элементами. Это важно, если требуется быстро сопоставить значения в структуре данных.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
В машинном обучении часто используются различные базовые алгоритмы в зависимости от типа задачи и характеристик данных. Однако, некоторые алгоритмы являются особенно популярными и универсальными.
Линейная регрессия используется для задач регрессии, где цель – предсказать непрерывную переменную на основе одной или нескольких независимых переменных. Простота, интерпретируемость и эффективное обучение на больших объемах данных.
from sklearn.linear_model import LinearRegression
# Пример использования линейной регрессии
model = LinearRegression()
model.fit(X_train, y_train)
predictions = model.predict(X_test)
Логистическая регрессия используется для задач бинарной классификации. Она оценивает вероятность принадлежности наблюдения к одному из двух классов. Простота, интерпретируемость и эффективность для линейно разделимых классов.
from sklearn.linear_model import LogisticRegression
# Пример использования логистической регрессии
model = LogisticRegression()
model.fit(X_train, y_train)
predictions = model.predict(X_test)
KNN используется как для классификации, так и для регрессии. Алгоритм находит K ближайших обучающих примеров в пространстве признаков и предсказывает класс (или значение) на основе большинства (или среднего) этих соседей. Простота и отсутствие необходимости в явной фазе обучения.
from sklearn.neighbors import KNeighborsClassifier
# Пример использования K-ближайших соседей
model = KNeighborsClassifier(n_neighbors=5)
model.fit(X_train, y_train)
predictions = model.predict(X_test)
Решающие деревья используются как для классификации, так и для регрессии. Дерево строится путем разбиения данных на подмножества на основе значений признаков. Интерпретируемость, способность работать с категориальными и числовыми данными, и выявление важности признаков.
from sklearn.tree import DecisionTreeClassifier
# Пример использования решающего дерева
model = DecisionTreeClassifier()
model.fit(X_train, y_train)
predictions = model.predict(X_test)
Случайный лес состоит из множества решающих деревьев, обученных на различных подвыборках данных. Итоговое предсказание получается путем усреднения предсказаний отдельных деревьев. Высокая точность, устойчивость к переобучению и возможность обработки больших объемов данных.
from sklearn.ensemble import RandomForestClassifier
# Пример использования случайного леса
model = RandomForestClassifier(n_estimators=100)
model.fit(X_train, y_train)
predictions = model.predict(X_test)
Градиентный бустинг создает ансамбль слабых моделей (обычно деревьев), обучаясь последовательно, чтобы уменьшить ошибку предыдущих моделей. Высокая точность, особенно для сложных задач с большими объемами данных.
from sklearn.ensemble import GradientBoostingClassifier
# Пример использования градиентного бустинга
model = GradientBoostingClassifier()
model.fit(X_train, y_train)
predictions = model.predict(X_test)
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Градиентное затухание (vanishing gradients) — это проблема, когда в глубоких нейросетях градиенты становятся очень малыми при обратном распространении.
Это мешает обновлению весов в начальных слоях, и обучение "замирает".
Чаще всего возникает в RNN и в сетях с плохой инициализацией или неподходящей функцией активации.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Валидация временных рядов требует специальных подходов, которые учитывают временную структуру данных. Обычные методы кросс-валидации не подходят, так как они разрывают временную последовательность.
Простейший метод заключается в разделении данных на две части: обучающую и тестовую выборки. При этом важно, чтобы тестовая выборка содержала данные, которые следуют за данными из обучающей выборки.
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
# Пример данных временного ряда
data = pd.Series(np.arange(100))
# Процент данных для тестовой выборки
test_size = 0.2
split_index = int(len(data) * (1 - test_size))
# Разделение данных
train_data = data[:split_index]
test_data = data[split_index:]
print("Обучающая выборка:", train_data)
print("Тестовая выборка:", test_data)
Кросс-валидация для временных рядов (Time Series Cross-Validation) выполняется путем последовательного использования разных временных интервалов для обучения и тестирования. Два основных подхода включают rolling cross-validation и expanding window validation.
Похожа на expanding window validation, но отличается тем, что каждая новая модель обучается на данных, включающих предыдущие обучающие данные, и делает одно предсказание на каждом шаге.
import numpy as np
import pandas as pd
# Пример данных временного ряда
data = pd.Series(np.arange(100))
# Размер начального окна и шаг
initial_window = 20
# Walk-forward validation
for i in range(initial_window, len(data)):
train_data = data[:i]
test_data = data[i:i+1]
print("Обучающая выборка:", train_data)
print("Тестовая выборка:", test_data)
Этот метод включает в себя создание фиксированного окна данных, которое движется по временной оси. Модель обучается на данных внутри окна и тестируется на следующем наборе данных. При валидации моделей для временных рядов следует учитывать временную структуру данных.
import numpy as np
import pandas as pd
# Пример данных временного ряда
data = pd.Series(np.arange(100))
# Размер окна и шаг
window_size = 20
step_size = 5
# Sliding window validation
for start in range(0, len(data) - window_size, step_size):
train_data = data[start:start+window_size]
test_data = data[start+window_size:start+window_size+step_size]
print("Обучающая выборка:", train_data)
print("Тестовая выборка:", test_data)
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Это ансамблевый метод, строящий модель как последовательность слабых моделей (обычно деревьев), где каждая новая модель корректирует ошибки предыдущей. Он использует градиентный спуск по функции потерь. Обладает высокой точностью и хорошо работает с табличными данными, но чувствителен к гиперпараметрам. Популярные реализации — XGBoost, LightGBM, CatBoost.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM