Data Science | Machinelearning [ru] – Telegram
Data Science | Machinelearning [ru]
20K subscribers
636 photos
40 videos
29 files
3.52K links
Все о Data Science, машинном обучении и искусственном интеллекте: от базовой теории до cutting-edge исследований и LLM.

По вопросам рекламы или разработки - @g_abashkin

РКН: https://vk.cc/cJPGXD
Download Telegram
⚙️ Обнаружение аномалий в данных временных рядов с помощью статистического анализа

Рассказываю, почему статичные пороги — не выход, когда дело доходит до пользовательской активности. Покажу, как в таких случаях спасает обнаружение аномалий.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
2
👩‍💻 Определение "аномального" элемента в сбалансированных данных

Вам передаётся сбалансированный набор объектов из 3-х различных классов (например, "cat", "dog", "bird").

Каждый объект представлен вектором признаков (list of floats). Один объект — подброшенный и не принадлежит ни одному из трёх известных классов: он отличается распределением.

Ваша задача — реализовать функцию detect_outlier(data: List[List[float]], labels: List[str]) -> int, которая возвращает индекс выброса в списке. Гарантируется, что в labels один лейбл может быть "unknown", а может и вовсе отсутствовать — выброс может быть замаскирован.

Метрика — средняя евклидова дистанция до других представителей того же класса должна быть на порядок выше, чем у нормальных объектов.

Пример данных:

data = [
[1.1, 0.9], [1.2, 1.0], [0.9, 1.1], # cat
[3.0, 3.1], [2.9, 3.0], [3.1, 2.9], # dog
[5.0, 5.1], [5.1, 5.0], [8.0, 8.0], # last — выброс
]

labels = ["cat", "cat", "cat", "dog", "dog", "dog", "bird", "bird", "bird"]


Решение задачи🔽

import numpy as np
from collections import defaultdict

def detect_outlier(data, labels):
data = np.array(data)
grouped = defaultdict(list)

for i, label in enumerate(labels):
grouped[label].append(i)

outlier_idx = -1
max_score = -1

for i, point in enumerate(data):
label = labels[i]
others = [j for j in grouped[label] if j != i]
if not others:
continue

distances = [np.linalg.norm(point - data[j]) for j in others]
avg_dist = np.mean(distances)

if avg_dist > max_score:
max_score = avg_dist
outlier_idx = i

return outlier_idx

# Тест
print(detect_outlier(data, labels)) # ➜ 8
Please open Telegram to view this post
VIEW IN TELEGRAM
31
🧠 МТС и НИУ ВШЭ открыли набор на второй поток магистратуры по ИИ

Программу «Исследования и предпринимательство в искусственном интеллекте» анонсировали на конференции True Tech Day. И вот, прием документов начнется 20 июня. Для 30 человек предусмотрены оплачиваемые места от МТС Web Services.

В московском кампусе ВШЭ студентов научат работать с языковыми моделями, генеративными нейросетями, системами компьютерного зрения и распознаванием речи. Лучших студентов пригласят на стажировку и трудоустройство в МТС Web Services.
1
⚙️ 5 техник, применяемых в анализе временных рядов, которые должен знать каждый. Часть 1

В этом руководстве мы будем разбираться, как повысить качество прогнозирования с помощью машинного обучения, используя точные методы разделения данных, перекрестную проверку временных рядов, конструирование признаков и многое другое.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
7🐳1
⚙️ Пишем персонального AI-ассистента на Python

Делюсь, как собрать простого голосового ассистента: он сам распознаёт речь, общается с LLM и отвечает голосом. Без GUI, но с кучей потенциала. Всё на Python, всё работает.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
3🔥2
⚙️ RAG на практике: чат-бот для корпоративной вики

Рассказываю, как делали чат-бота для внутренней документации: где споткнулись, что взлетело, и почему не всё решается embedding'ами. Может, вам сэкономит пару бессонных ночей.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
32
⚙️ Линейная регрессия в ML для самых маленьких

Поясняю линейную регрессию так, чтобы стало понятно, зачем вообще эта прямая на графике и как с её помощью предсказывать результат по набору чисел. Без лишней математики.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
4
⚙️ Что такое генераторы в Python и зачем они нужны?

Генераторы — это функции в Python, которые возвращают значения по одному с помощью ключевого слова yield, вместо полного возврата всех значений сразу. Они полезны для работы с большими объемами данных, так как сохраняют память, генерируя значения на лету.

➡️ Пример:

# Генератор для получения первых N чисел Фибоначчи
def fibonacci(n):
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b

# Используем генератор
for num in fibonacci(5):
print(num)

# Вывод: 0, 1, 1, 2, 3


🗣️ В этом примере генератор fibonacci вычисляет числа по запросу, вместо сохранения всех значений в памяти. Это делает генераторы особенно удобными для работы с потоками данных или бесконечными последовательностями.


🖥 Подробнее тут
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍1
⚙️ Как построить хороший пайплайн разработки ML-модели

Рассказываю, как построить понятный и гибкий ML-процесс: чтобы данные масштабировались, новички вливались, а модель не вела себя как капризный кот.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
52
🚀 Правда или нет, что Google победил Cursor?

В статье сравнивают два AI-инструмента для разработки: Firebase Studio от Google и Cursor от Anysphere. Кто круче — облачная платформа или интегрированный редактор?

Читать...
✔️ Рабочий флоу — как велосипед: собирается под себя

Можно взять крутой инструмент, подход или методику, но если она не встраивается в твой ритм — ты всё равно будешь буксовать.

👉 Совет: строй свою систему продуктивности так же, как кастомишь код: под себя. Пробуй, адаптируй, выкидывай. Рабочий флоу — это не универсальный шаблон, а твой личный интерфейс с задачами.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32
🧠 Распознавание орхоно-енисейских рунических надписей методами машинного обучения

В статье рассказывают о расшифровке орхоно-енисейских рун: древние тексты на камне, трудности интерпретации и идеи автоматизации для точности и скорости анализа.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
4🔥4
➡️ Как Duolingo юзает машинное обучение для прокачки английского: кратко и по делу

В статье рассказывают, как ИИ сделал Duolingo фабрикой языковых курсов: генерация контента, проверка ответов, адаптация заданий — всё на автомате. Учить стало быстрее.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
4
👩‍💻 Адаптивный поиск порога "почти одинаковых" векторов

У вас есть множество эмбеддингов — векторов признаков объектов (например, предложений, изображений, пользователей).

Требуется реализовать функцию find_similar_pairs(vectors, tolerance=0.05), которая возвращает все пары индексов, где косинусная разница между векторами меньше tolerance.

Дополнительные условия:

• Векторы могут быть высокой размерности (до 512)

• Пара (i, j) считается дубликатом (i < j), если их cosine similarity ~ 1.0

• Не используйте внешние ML-библиотеки: только numpy

• Функция должна быть оптимизирована — без грубой проверки каждой пары, если можно


Решение задачи🔽

import numpy as np

def cosine_similarity(a, b):
a, b = np.array(a), np.array(b)
return
np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))

def find_similar_pairs(vectors, tolerance=0.05):
result = []
n = len(vectors)
for i in range(n):
for j in range(i + 1, n):
sim = cosine_similarity(vectors[i], vectors[j])
if 1 - sim <= tolerance:
result.append((i, j))
return result
Please open Telegram to view this post
VIEW IN TELEGRAM
2
🧠 Создаем свой RAG: введение в LangGraph

В статье объясняют, что такое RAG и как использовать LangGraph для генерации с дополненной выборкой: основы, примеры и подготовка к созданию собственных RAG-систем.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
3
👩‍💻 Напишите функцию для расчёта Accuracy вручную

В машинном обучении Accuracy — это метрика качества классификации. Показывает, сколько предсказаний модель сделала правильно.

Решение задачи🔽

def accuracy_score(y_true, y_pred):
correct = 0
for true, pred in zip(y_true, y_pred):
if true == pred:
correct += 1
return correct / len(y_true)

# Пример использования:
y_true = [1, 0, 1, 1, 0, 1]
y_pred = [1, 0, 0, 1, 0, 1]

print(accuracy_score(y_true, y_pred)) # 0.833...
Please open Telegram to view this post
VIEW IN TELEGRAM
32🐳1
🤔 Выбираем MLOps инструменты с учётом зрелости команды

В статье разбирают, как выбрать MLOps-инструменты под уровень зрелости команды: почему решений много, но не все подходят, и как не утонуть в многообразии вариантов.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
3
🧠 Языковые модели против мошенников: как LLM помогают бороться с отмыванием денег и финансовым мошенничеством

В статье разбирают, как LLM помогает банкам бороться с мошенничеством: от отслеживания подозрительных транзакций до анализа фишинговых схем — умная защита в действии.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
2
👩‍💻 Чем отличается метод .transform() от .apply() в pandas?

В pandas методы .transform() и .apply() часто используются для обработки данных по столбцам и строкам, но они работают по-разному. Метод .apply() применяет функцию к каждому элементу или ряду, и возвращает объект любой формы (например, DataFrame или Series). В отличие от него, .transform() применяет функцию к каждой ячейке или группе и возвращает объект той же формы, что и входной.

➡️ Пример:

import pandas as pd

df = pd.DataFrame({'A': [1, 2, 3], 'B': [10, 20, 30]})

# Используем .apply() для вычисления суммы по столбцам
print(df.apply(sum)) # Вернет Series с суммами столбцов

# Используем .transform() для нормализации каждого значения в столбце
print(df.transform(lambda x: (x - x.mean()) / x.std()))
# Вернет DataFrame с нормализованными значениями


🗣 .apply() подходит для сложных операций и агрегаций, а .transform() удобно использовать для обработки данных с сохранением исходной структуры.


🖥 Подробнее тут
Please open Telegram to view this post
VIEW IN TELEGRAM
8