Реалізація 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 операції з квантизацією 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 тижнів. Стоимість розраховується індивідуально.