Data Science | Machinelearning [ru]
Все о Data Science, машинном обучении и искусственном интеллекте: от базовой теории до cutting-edge исследований и LLM. Личный блог автора - @just_genych По вопросам рекламы или разработки - @g_abashkin РКН: https://vk.cc/cJPGXD
Mostrar más📈 Análisis del canal de Telegram Data Science | Machinelearning [ru]
El canal Data Science | Machinelearning [ru] (@devsp) en el segmento lingüístico de Ruso es un actor destacado. Actualmente la comunidad reúne a 19 779 suscriptores, ocupando la posición 6 507 en la categoría Tecnologías y Aplicaciones y el puesto 33 309 en la región Rusia.
📊 Métricas de audiencia y dinámica
Desde su creación el невідомо, el proyecto ha mostrado un crecimiento acelerado, reuniendo a 19 779 suscriptores.
Según los últimos datos del 29 agosto, 2026, el canal mantiene una actividad estable. En los últimos 30 días la variación de miembros fue de -146, y en las últimas 24 horas de -2, conservando un alto alcance.
- Estado de verificación: No verificado
- Tasa de interacción (ER): El promedio de interacción de la audiencia es 8.07%. Durante las primeras 24 horas tras publicar, el contenido suele obtener 4.83% de reacciones respecto al total de suscriptores.
- Alcance de las publicaciones: Cada publicación recibe en promedio 1 597 visualizaciones. En el primer día suele acumular 955 visualizaciones.
- Reacciones e interacción: La audiencia responde de forma activa: el promedio de reacciones por publicación es 6.
- Intereses temáticos: El contenido se centra en temas clave como llm, nvidia, контекст, openai, архитектура.
📝 Descripción y política de contenido
El autor describe el recurso como un espacio para expresar opiniones subjetivas:
“Все о Data Science, машинном обучении и искусственном интеллекте: от базовой теории до cutting-edge исследований и LLM.
Личный блог автора - @just_genych
По вопросам рекламы или разработки - @g_abashkin
РКН: https://vk.cc/cJPGXD”
Gracias a la alta frecuencia de actualizaciones (últimos datos recibidos el 30 agosto, 2026), el canal mantiene la vigencia y un amplio alcance. La analítica demuestra que la audiencia interactúa activamente con el contenido, lo que lo convierte en un punto de referencia dentro de la categoría Tecnologías y Aplicaciones.
residuals = |y_pred - y_true| + 1e-8. Затем на тех же признаках учите модель для log(residuals). На выходе получаете sigma = exp(model_var.predict(X)).
residuals = np.abs(y_train - model_mean.predict(X_train)) + 1e-8
model_var = LGBMRegressor(n_estimators=80)
model_var.fit(X_train, np.log(residuals))
def predict_with_uncertainty(X):
y = model_mean.predict(X)
sigma = np.exp(model_var.predict(X))
return y, sigma
Почему это затащило в production
Первое — интерпретируемость без SHAP. Модель остатков сразу показывает, где основная модель ошибается: "на товарах с высокой ценой разброс выше". Это даёт инженерный контекст для валидации.
Второе — простота деплоя. Два predict и один exp — всё. Никаких байесовских сеток или сложных loss-функций. Надёжно и быстро.
Третье — калибровка под данные. Модель остатков учится на реальных ошибках первой, а не на теоретическом распределении. Это даёт адекватные оценки uncertainty для конкретного датасета.
Типичные грабли и trade-offs
Вторая модель легко переобучается. Я режу num_leaves, увеличиваю min_data_in_leaf и обязательно валидирую отдельный холдаут. Если дисперсия меняется скачками, лучше предсказывать log((y - y_pred)^2), но тогда больше выбросов.
Метод не учитывает асимметрию распределения остатков. Если модель системно ошибается в одну сторону, sigma будет завышена. На малых выборках вторая модель может просто выучить шум — тут помогает кросс-валидация на уровне остатков.
Для медицины или финансов я бы добавил конформное предсказание поверх — как контрольный выстрел. Это повышает надёжность, но добавляет latency.
Вывод: Двухуровневая модель GBDT — простой кирпичик для production, который даёт не только answer, но и confidence, без байеса и лишней магии.def differentiable_gain(x, y, t, alpha=10):
weights = torch.sigmoid(alpha * (x - t))
left_weight = weights.mean()
right_weight = 1 - left_weight
left_var = (y * weights).sum() / (weights.sum() + 1e-8)
right_var = (y * (1 - weights)).sum() / ((1 - weights).sum() + 1e-8)
gain = left_weight * left_var + right_weight * right_var
return gain
t = nn.Parameter(torch.tensor(0.5))
optimizer = torch.optim.SGD([t], lr=0.01)
for _ in range(100):
loss = -differentiable_gain(x_data, y_data, t)
loss.backward()
optimizer.step()
Практические советы и trade-offs
-- Высокий alpha ближе к ступеньке, но градиенты становятся резкими -- без регуляризации будете ловить NaN. Рекомендую добавлять L2 на t или использовать gradient clipping.
-- Метод вывозит на разреженных задачах или признаках вроде текстовых эмбеддингов, где переборные пороги просто не имеют смысла. Например, для фичей с низкой entropy по классам перебор теряет время на бесполезные кандидаты.
-- В гибридных подходах типа NGBoost такое ускоряет обучение: не надо ждать, пока дерево переберет все варианты. Но не ждите gain-to-gain эквивалентности с дискретным разбиением -- это trade-off за скорость.
Предупреждение о типичной ошибке
Ошибка: думать, что alpha можно сделать бесконечно большим. Это приводит к взрыву градиентов и потере дифференцируемости. Держите alpha в диапазоне 5-20, и всегда проверяйте стабильность loss. При малом alpha аппроксимация грубая -- проигрываете в точности. Компромисс обычно есть, и он оправдывает себя по скорости.
Для тех, кто хочет глубже:
-- "Differentially Private GBDT with Smooth Thresholds" (2022) -- связь с приватностью и градиентами.
-- "XGBoost with Continuous Gradient" -- модификации от сообщества.
Вывод: Гладкая аппроксимация порога в GBDT -- это инженерный компромисс между точностью и скоростью, который критически важен для production ML с высокоразмерными или стриминговыми данными.def online_update(model, X_new, y_new):
leaf_indices = model.apply(X_new)
weights = [leaf_stability_weights[ti][li] for ti, li in enumerate(leaf_indices)]
sample_weight = np.mean(weights)
gradient = loss_gradient(y_new, model.predict(X_new))
model.update(gradient * sample_weight, learning_rate=0.01)
Обратите внимание: никакого ручного тюнинга порогов. Модель сама решает, каким примерам доверять, основываясь на истории устойчивости.
Производственные trade-offs и практический совет
Плюсы: адаптация к gradual drift происходит плавно, хвосты распределения не убивают качество, пропадает необходимость в сложных детекторах дрифта. Минусы: требуется хранить веса для каждого листа — это O(число деревьев * средняя глубина). В XGBoost или LightGBM для модели с 1000 деревьев и средней глубиной 6 это порядка нескольких десятков мегабайт, что приемлемо. Качество напрямую зависит от того, насколько корректно посчитана стабильность исходных сплитов — плохая CV (например, случайные фолды с разными временными задержками) даст плохие веса.
Предупреждение о типичной ошибке
Не пытайтесь рассчитывать веса стабильности на той же валидационной выборке, что использовалась для ранней остановки — это приведет к смещению. Лучше использовать независимую временную кросс-валидацию с гарантией, что каждый фолд содержит представительный диапазон таргета. Иначе веса станут бесполезными.
Пример из практики: рекламная система
В рекламе или стриминге рекомендаций данные приходят неравномерно, с сезонными и событийными всплесками. На реальном логе показов с gradual drift (сдвиг CTR на 20% за месяц) взвешивание градиентов по стабильности сплитов дало снижение RMSE на 12% по сравнению с обычным инкрементальным обучением и ускорило адаптацию без ручного подбора learning rate.
Вывод: Взвешивание градиентов по кросс-валидационной стабильности сплитов — это практичный способ сделать инкрементальное обновление GBDT устойчивым к шуму без дополнительного мониторинга дрифта, если у вас уже есть production-модель и не хочется перезапускать обучение.