Разработка AI-системы для мониторинга животноводства

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1Все 1564 услуг
Разработка AI-системы для мониторинга животноводства
Средний
~1-2 недели
Часто задаваемые вопросы

Направления AI-разработки

Этапы разработки AI-решения

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1348
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1247
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    949
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1183
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    642
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    921

В крупных молочных фермах на 1000+ голов ветеринар не успевает осмотреть каждую корову ежедневно. Потеря одного дня при мастите — падение удоя на 10–15%, а несвоевременное осеменение — пустые дни и значительные убытки. Мы разрабатываем AI-системы под ключ: склеиваем данные с ушных датчиков, румен-болусов, молокомеров и видео, выдаём алерты за 24–48 часов до клинических проявлений. Наш опыт — 10+ проектов в России и СНГ, среднее снижение падежа — 15–20%. Автоматическое обнаружение охоты в 2 раза эффективнее визуального наблюдения: точность достигает 95% против 60%. Используем машинное обучение для поведенческого анализа скота и IoT-устройства для сбора данных.

Какие проблемы решает AI-мониторинг?

Три ключевые задачи, которые закрывает система:

  1. Пропущенная охота — каждая охота длится 12–18 часов, визуально её замечают в 60% случаев. Система анализирует активность и руминацию с интервалом 2 минуты и выдаёт алерт за 4–6 часов до окончания окна осеменения.

  2. Субклинический мастит — электропроводность молока растёт за 24–48 часов до появления сгустков. Чувствительность 85% при специфичности 90%.

  3. SARA (субклинический ацидоз рубца) — pH рубца падает ниже 5.8 на 3+ часа, снижая продуктивность на 15%. Анализ временных рядов с румен-болуса выявляет риск за 1–2 дня.

Как детектировать охоту с точностью 95%?

Алгоритм по активности и руминации:

import pandas as pd
import numpy as np
from scipy.signal import find_peaks

def detect_estrus(animal_id: str, sensor_data: pd.DataFrame,
                  baseline_days: int = 21) -> dict:
    """
    Охота у КРС: резкий рост активности + снижение руминации
    Цикл ~21 день — паттерн периодический
    """
    recent = sensor_data[sensor_data['animal_id'] == animal_id].tail(baseline_days * 24)

    activity_baseline = recent['activity_count'].quantile(0.5)
    rumination_baseline = recent['rumination_time'].quantile(0.5)

    current_24h = sensor_data[
        sensor_data['animal_id'] == animal_id
    ].tail(12)

    activity_ratio = current_24h['activity_count'].mean() / (activity_baseline + 1e-9)
    rumination_ratio = current_24h['rumination_time'].mean() / (rumination_baseline + 1e-9)

    estrus_score = activity_ratio * (2 - rumination_ratio)

    prev_cycle_score = check_previous_cycle(animal_id, sensor_data, days_back=21)

    return {
        'animal_id': animal_id,
        'estrus_score': float(estrus_score),
        'estrus_detected': estrus_score > 2.5,
        'confidence': 'high' if prev_cycle_score > 2.0 else 'medium',
        'recommended_action': 'insemination_window_12-18h' if estrus_score > 2.5 else None
    }

Почему руминация — ключевой индикатор здоровья?

Ранняя детекция мастита:

def mastitis_risk_score(milking_data: pd.DataFrame, animal_id: str) -> float:
    """
    Мастит → воспаление → рост ионов Na+, Cl- → рост электропроводности
    """
    today_milking = milking_data[
        (milking_data['animal_id'] == animal_id) &
        (milking_data['date'] == milking_data['date'].max())
    ]

    if today_milking.empty:
        return 0.0

    quarters = ['LF', 'RF', 'LR', 'RR']
    conductivities = {q: today_milking[f'conductivity_{q}'].mean()
                      for q in quarters if f'conductivity_{q}' in today_milking.columns}

    if len(conductivities) < 2:
        return 0.0

    mean_cond = np.mean(list(conductivities.values()))
    max_deviation = max(abs(v - mean_cond) for v in conductivities.values())

    relative_deviation = max_deviation / (mean_cond + 1e-9)

    yield_deviation = check_yield_drop(animal_id, milking_data, today_milking)

    risk_score = 0.6 * (relative_deviation / 0.1) + 0.4 * yield_deviation
    return min(1.0, risk_score)

Дополнительные признаки мастита: повышение температуры молока в квартете (+0.5°C), флокуляция, снижение удоя, изменение поведения.

Как шаг за шагом настроить детекцию мастита?

  1. Сбор эталонных данных: минимум 500 доек без патологии для каждой коровы.
  2. Вычисление baseline электропроводности по каждому квартету с учётом стадии лактации.
  3. Настройка порогов срабатывания: чувствительность 85% при специфичности 90%.
  4. Валидация на исторических данных: минимум 50 подтверждённых случаев мастита.
  5. A/B тест на 10% поголовья перед полным деплоем.

Что даёт мониторинг SARA?

Субклинический ацидоз рубца (SARA) — снижение pH < 5.8 более 3 часов:

def detect_sara_risk(rumen_bolus_data: pd.DataFrame, animal_id: str) -> dict:
    """
    Данные от rumen bolus SmaXtec обновляются каждые 10 минут
    """
    today_data = rumen_bolus_data[
        (rumen_bolus_data['animal_id'] == animal_id) &
        (rumen_bolus_data['date'] == pd.Timestamp.today().date())
    ]

    low_ph_minutes = len(today_data[today_data['rumen_pH'] < 5.8]) * 10

    avg_ph = today_data['rumen_pH'].mean() if not today_data.empty else 6.5
    rumination_today = today_data['rumen_motility'].mean() if not today_data.empty else 1.0

    sara_risk = 'high' if low_ph_minutes > 180 else (
        'medium' if low_ph_minutes > 60 else 'low'
    )

    return {
        'animal_id': animal_id,
        'low_ph_hours': round(low_ph_minutes / 60, 1),
        'avg_ph': round(avg_ph, 2),
        'sara_risk': sara_risk,
        'action': 'adjust_roughage_ratio' if sara_risk == 'high' else None
    }

Мониторинг SARA позволяет точное кормление: при выявлении риска система рекомендует изменить соотношение грубых кормов. Внедрение снижает затраты на ветобслуживание и повышает продуктивность стада.

Как интегрировать систему с существующим ПО?

Мы поддерживаем REST API для передачи событий в DairyComp 305, Lely T4C, DeLaval ALPRO, а также в Herd monitoring software. Интеграция занимает 1-2 дня. Данные передаются в реальном времени: события охоты, риски заболеваний, весовые показатели.

Как мы внедряем систему: кейс

На ферме с 2000 голов КРС мы установили ушные акселерометры SCR и румен-болусы SmaXtec. За первую неделю собрали ~1.5 млн записей активности и 200 тыс. замеров pH. Через 3 недели модели достигли 92% чувствительности по охоте и 90% по SARA. Сравните: визуальный метод даёт 60% охоты, а ручной анализ pH — единичные замеры. Автоматизация в 1.5 раза сократила затраты на ветслужбу.

Как мы решали проблему дрейфа сенсоров?На этапе калибровки мы столкнулись с дрейфом сенсоров: через 3 месяца работы некоторые акселерометры начинали завышать активность. Решение — автоматическая перекалибровка каждые 2 недели на основе средних показателей по группе. Это повысило стабильность детекции мастита с 82% до 90%.
Метод Точность детекции охоты Затраты времени
Визуальное наблюдение 60-70% 2-3 часа/день
Акселерометр + AI 95% 5 минут/день
Комбинация датчиков 98% 2-3 минуты/день

Этапы проекта и сроки

Этап Срок Что входит
Аналитика и проектирование 5–7 дней Аудит фермы, подбор датчиков, архитектура ML-пайплайна
Интеграция сенсоров 1–2 недели Настройка шлюзов, сбор эталонных данных, калибровка
Разработка моделей 2–4 недели Детекция охоты, мастита, SARA — baseline + fine-tuning
Дашборд и алерты 1–2 недели Веб-интерфейс, Telegram-бот, экспорт в DairyComp
Тестирование и деплой 1 неделя A/B тест на 10% поголовья, оптимизация latency

Что входит в работу

  • Архитектурная документация и описание API
  • Обучение персонала (2 дня очно или онлайн)
  • 30 дней пост-релизной технической поддержки
  • Гарантия на модели — 6 месяцев (бесплатные обновления при изменении стада)
  • Адаптация под существующую инфраструктуру (DairyComp 305, Lely T4C, DeLaval ALPRO)

Оставьте заявку — мы оценим вашу ферму за 2 дня и предложим архитектуру. Свяжитесь с нами, чтобы обсудить проект. Получите консультацию по вашему стаду и узнайте, как AI-мониторинг может снизить падёж и повысить удои.

Детекция аномалий: автоэнкодеры, Isolation Forest, PyOD

Мы сталкиваемся с этой болью постоянно: мониторинг сервера показывает CPU 85%, память 91% — это норма в час пик или начало атаки? Классификатор здесь не поможет: аномалии по определению редки, разнообразны и заранее не размечены. Supervised learning требует примеров аномалий в обучающей выборке — а значит, не работает для того, о чём вы ещё не знаете. Наш опыт показывает: без unsupervised-подхода детекция превращается в гадание.

Почему детекция аномалий требует unsupervised подхода?

Главная проблема — отсутствие разметки и дисбаланс классов в экстремальной форме. Фрод-транзакции составляют 0.01–0.1% от общего объёма. Производственный дефект — 0.5–3%. При таком соотношении даже наивный классификатор «всё нормально» даст accuracy 99.9% и precision/recall для аномального класса, близкие к нулю. Supervised-модели здесь бессильны.

Вторая проблема — «нормальность» всегда контекстна. Нормально ли, что пользователь логинится в 3 часа ночи? Зависит от его истории и временной зоны. Нормально ли вибрация подшипника 2.3 мм/с? Зависит от режима работы станка и его возраста. Поэтому мы встраиваем контекст в модель через feature engineering и временные окна.

Третья — оценка качества. Нет стандартного test set, AUC-ROC считается только если есть хотя бы немного размеченных примеров. На полностью неразмеченных данных — только domain expert validation и косвенные метрики.

Как отличить аномалию от шума в реальном времени?

Ответ — адаптивные пороги и мониторинг статистик модели. В разделе кейса покажем, как это работает.

Методы и инструменты

Метод Тип данных Скорость обучения Типичное применение
Isolation Forest Табличные, категориальные Высокая Baseline для первых гипотез
Autoencoder Изображения, временные ряды, логи Средняя Неструктурированные данные
LSTM-AE Многомерные временные ряды Низкая Промышленная телеметрия
PyOD (ансамбль) Табличные Высокая Быстрое сравнение 40+ методов

Isolation Forest — стандартный baseline для табличных данных. Идея: аномалии изолируются быстрее при случайном разбиении пространства признаков. Работает хорошо при contamination 0.01–0.1, устойчив к масштабу признаков, не требует нормализации. Реализация в sklearn.ensemble.IsolationForest.

Типичная ошибка: ставить contamination='auto' без понимания данных. Auto-режим предполагает порог -0.5, что не всегда соответствует реальной доле аномалий. Лучше: оцените ожидаемый процент аномалий через domain knowledge и задайте явно. Мы гарантируем подбор contamination под ваш кейс.

PyOD (Python Outlier Detection) — библиотека с 40+ алгоритмами под единым API. Включает: OCSVM, LOF, COPOD, ECOD, DeepSVDD, AutoEncoder. Удобно для быстрого сравнения методов на одних данных.

Автоэнкодеры — основной метод для неструктурированных данных (временные ряды, изображения, логи). Идея: обучаем сеть восстанавливать нормальные данные, аномалии дают высокую ошибку реконструкции. Порог аномальности — 95-й или 99-й процентиль ошибки на validation set из нормальных данных.

Практическая проблема автоэнкодеров: переобучение на «нормальных» паттернах, которые всё равно встречаются редко. Если в train set есть хоть несколько аномалий, модель может научиться их хорошо восстанавливать. Решение: тщательная очистка training data или использование Variational Autoencoder (VAE), который лучше обобщает.

LSTMAE для временных рядов — LSTM-автоэнкодер захватывает временные зависимости лучше, чем обычный AE. Особенно эффективен для мультивариантных временных рядов (10+ сенсоров одновременно). Реализация через PyTorch, обучение с MSELoss на скользящих окнах.

Детально: детекция аномалий в промышленных временных рядах

Задача: вибрационные датчики на 12 насосах химического предприятия, 6 сенсоров на насос, частота 100 Гц. Нужно предупредить о надвигающейся поломке за 4–24 часа.

Архитектура решения:

Сырые данные → feature extraction (RMS, кэртозис, пиковый фактор, FFT-амплитуды на резонансных частотах) → нормализация по скользящему окну 24ч → LSTMAE → reconstruction error → пороговая логика + алертинг.

Размер окна LSTM: 60 секунд (6000 точек на 100 Гц). Слишком маленькое окно — не захватывает медленные паттерны. Слишком большое — теряет чувствительность к быстрым изменениям.

Порог аномальности: не фиксированный, а адаптивный. threshold = mean(errors_last_7d) + 3 * std(errors_last_7d). При дрейфе нормального состояния (плановый износ) порог адаптируется, избегая false positives.

Результат на 6-месячном пилоте: обнаружено 4 из 5 реальных предотказных состояний (recall 0.8), 2 ложных тревоги за 6 месяцев (precision 0.67). До внедрения: 3 незапланированных остановки по $40k каждая. Экономия после внедрения — $120k за полгода (отчёт о пилоте на объекте клиента).

Фрод-детекция: специфика финансовых данных

Финансовые транзакции имеют несколько особенностей, усложняющих детекцию:

  • Concept drift: паттерны фрода меняются быстрее нормального поведения. Модель, обученная полгода назад, устаревает.
  • Adversarial adaptation: продвинутые мошенники адаптируются к обнаружению — делают транзакции похожими на нормальные.
  • Временная зависимость: серия нормальных транзакций, а потом один необычный перевод — это аномалия последовательности, а не одиночной точки.

Практический стек для фрод-детекции: LightGBM с SMOTE-oversampling для supervised части (по известным фрод-кейсам) + Isolation Forest для unsupervised (новые паттерны). Оба сигнала объединяются в ансамбль, финальное решение — через пороги, настроенные на приемлемый FPR (0.1–1% от транзакций на ручную проверку).

Как оценить качество без разметки?

Когда ground truth нет, для оценки используем:

  • Synthetic anomaly injection: добавляем искусственные аномалии (spike, level shift, point outlier) и смотрим, обнаруживает ли их модель
  • Expert validation: случайная выборка топ-K аномалий от модели → review эксперта → precision
  • Business metric: снизилось ли количество пропущенных инцидентов / ложных тревог после внедрения
Техническая деталь: настройка адаптивного порога

Порог вычисляется как mean(errors) + k * std(errors) на скользящем окне 7 дней. Коэффициент k подбирается на validation set с синтетическими аномалиями для достижения FPR < 0.1%. При дрейфе признаков окно автоматически сдвигается.

Процесс работы

  1. Интервью с доменными экспертами — понимаем, что такое «нормальность» и какие инциденты уже были.
  2. EDA и подготовка данных — очистка, создание признаков, временные окна.
  3. Baseline (Isolation Forest) — быстрая валидация на известных инцидентах.
  4. Выбор и кастомизация модели — Autoencoder / LSTM-AE / ансамбль.
  5. Обучение, валидация с синтетическими аномалиями.
  6. Развёртывание в production — пайплайн на Kafka + Flink / Airflow, алертинг в Telegram/Slack, мониторинг дрифта.
  7. Post-deployment сопровождение — мониторинг метрик модели, обновление порогов.

Что входит в работу

  • Аудит текущих данных и процессов
  • Разработка и обучение моделей (Isolation Forest / Autoencoder / LSTM-AE / ансамбль)
  • Настройка адаптивных порогов и алертинга
  • Панель мониторинга аномалий (Grafana / Streamlit)
  • Документация model card и pipeline
  • Обучение вашей команды (2–3 сессии)
  • Гарантийная поддержка 3 месяца

Сроки: baseline-система с одним методом — 2–4 недели. Production-система с адаптивными порогами, алертингом и мониторингом — 2–5 месяцев. Стоимость рассчитывается индивидуально под ваш кейс.

Наша команда имеет 8+ лет опыта в промышленной аналитике и 15+ успешных проектов по детекции аномалий в телеметрии, финансах и IT-мониторинге. Получите консультацию — расскажем, как решить вашу задачу.