Реализация AI-детекции аномалий IoT-датчиков в мобильном приложении

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1735 услуг
Реализация AI-детекции аномалий IoT-датчиков в мобильном приложении
Сложный
~1-2 недели
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

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

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    495

Реализация AI-детекции аномалий IoT-датчиков в мобильном приложении

Порог-алерт «если температура > 80°C» срабатывает поздно: к моменту превышения порога проблема уже сформировалась. Аномалия — это отклонение от нормального паттерна, которое может быть заметно за часы или дни до достижения критического значения. Мотор, который обычно разогревается до 45°C за 20 минут, сегодня разогревается до 45°C за 8 минут — это аномалия, хотя температура в норме.

Алгоритмы: что применимо в мобильном контексте

Для IoT-аномалий в реальном времени на мобильном устройстве нужны алгоритмы с малым потреблением памяти и быстрым инференсом. Не всё, что работает в Jupyter Notebook с полным датасетом, годится для онлайн-детекции.

Z-score с адаптивным baseline. Не фиксированный mean/std за весь период, а скользящее окно (Exponentially Weighted Moving Average). Работает на устройстве без модели:

class EWMAnomalyDetector(
    private val alpha: Double = 0.1,  // коэффициент сглаживания
    private val threshold: Double = 3.0  // количество сигм
) {
    private var ewma: Double? = null
    private var ewmVar: Double = 0.0

    fun detect(value: Double): AnomalyResult {
        val mean = ewma ?: run { ewma = value; return AnomalyResult.Normal(value, 0.0) }
        val deviation = value - mean
        ewmVar = alpha * deviation * deviation + (1 - alpha) * ewmVar
        val sigma = sqrt(ewmVar).coerceAtLeast(1e-9)
        val zScore = abs(deviation) / sigma

        ewma = alpha * value + (1 - alpha) * mean
        return if (zScore > threshold) {
            AnomalyResult.Anomaly(value, zScore, deviation > 0)
        } else {
            AnomalyResult.Normal(value, zScore)
        }
    }
}

Isolation Forest. Обучается офлайн, инференс быстрый. Для многомерных данных (несколько датчиков одновременно) — лучший вариант без нейросетей. Модель конвертируется в TFLite через ONNX или напрямую через sklearn2pmml + кастомный конвертор.

LSTM Autoencoder. Лучший для временных рядов с паттернами (суточная цикличность потребления, производственные смены). Обучается восстанавливать нормальные последовательности; высокая reconstruction error = аномалия. На устройстве — TFLite LSTM ops с квантизацией int8 для снижения потребления памяти с ~15 МБ до ~4 МБ.

// iOS: LSTM Autoencoder инференс через Core ML
class LSTMAnomalyDetector {
    let model: SensorAnomalyDetector // сгенерированный Core ML класс
    private let windowSize = 60 // 60 семплов = 1 минута при 1 Гц
    private var buffer: [[Double]] = []

    func process(reading: SensorReading) -> AnomalyScore? {
        buffer.append(reading.toFeatureVector())
        guard buffer.count >= windowSize else { return nil }

        let window = Array(buffer.suffix(windowSize))
        let input = try? MLMultiArray(shape: [1, NSNumber(value: windowSize), NSNumber(value: reading.dimensions)],
                                       dataType: .double)
        // заполняем input...

        guard let prediction = try? model.prediction(input: input!),
              let reconstructed = prediction.output as? MLMultiArray else { return nil }

        let mse = computeMSE(original: window, reconstructed: reconstructed)
        buffer.removeFirst() // sliding window
        return AnomalyScore(mse: mse, isAnomaly: mse > model.threshold)
    }
}

Многоуровневая детекция: устройство + сервер

Оптимальная архитектура — двухуровневая. На устройстве: лёгкий EWMA или простой пороговый детектор для мгновенной реакции (< 100 мс). На сервере: тяжёлая модель (Isolation Forest, LSTM AE) с полным историческим контекстом для точной классификации.

Мобильное приложение получает события обоих уровней:

  • Устройство → прямой пуш через локальное уведомление, если приложение запущено
  • Сервер → FCM/APNs с подтверждённой аномалией и её классификацией
@Serializable
data class AnomalyEvent(
    val sensorId: String,
    val sensorName: String,
    val timestamp: Long,
    val value: Double,
    val baseline: Double,
    val deviationPercent: Double,
    val anomalyType: AnomalyType, // SPIKE, DRIFT, PATTERN_BREAK, FLATLINE
    val severity: Severity, // LOW, MEDIUM, HIGH, CRITICAL
    val possibleCause: String? // заполняется сервером через LLM
)

Аналитика аномалий: паттерны и кластеризация

Одиночная аномалия может быть случайным выбросом. Систематические аномалии по расписанию — проблема. Экран аналитики показывает:

  • Heatmap аномалий по датчикам и времени суток
  • Кластеры аномалий по типу (DBSCAN на серверной стороне)
  • Корреляции между датчиками: «аномалии на датчике T-3 всегда предшествуют аномалиям на P-7 через 15 минут»

Эти инсайты появляются только при накоплении данных за несколько недель — важно сразу закладывать хранение всех аномалий с контекстом.

Управление ложными срабатываниями

Первая претензия к системе детекции аномалий: «слишком много ложных алертов». Инструменты управления:

  • Feedback loop: кнопка «Это нормально» на карточке аномалии — отправляет negative sample, сервер учитывает в дообучении
  • Suppressions: «не сигнализировать по датчику T-5 с 06:00 до 08:00 — это плановый прогрев»
  • Confidence threshold: показывать только аномалии с confidence > 0.8

Разработка модуля детекции аномалий для мобильного IoT-приложения с двухуровневой архитектурой и feedback loop: 5-8 недель. Стоимость рассчитывается индивидуально.