AI Mental State Monitoring via Device Data

We design and deploy artificial intelligence systems: from prototype to production-ready solutions. Our team combines expertise in machine learning, data engineering and MLOps to make AI work not in the lab, but in real business.
Showing 1 of 1 servicesAll 1566 services
AI Mental State Monitoring via Device Data
Medium
~2-4 weeks
FAQ
AI Development Areas
AI Solution Development Stages
Latest works
  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1161
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1041
  • image_logo-advance_0.png
    B2B Advance company logo design
    561
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    823
  • image_logo-aider_0.jpg
    AIDER company logo development
    762
  • image_crm_chasseurs_493_0.webp
    CRM development for Chasseurs
    848

AI-мониторинг психического состояния через носимые устройства

Мониторинг психического состояния — стресса, тревоги, депрессии — через носимые устройства представляет собой активно развивающееся направление digital health. Модели достигают AUC 0.70-0.85 для детекции стресса, что полезно для превентивных вмешательств, но не заменяет клиническую диагностику.

Физиологические маркеры психического состояния

Вегетативная нервная система как мишень: ВНС напрямую отражает стресс-ответ. Симпатическая активация (стресс) → тахикардия, снижение HRV, усиление потоотделения, повышение температуры кожи.

Ключевые биомаркеры:

stress_biomarkers = {
    # HRV (Heart Rate Variability) — золотой стандарт
    'rmssd': 'парасимпатический тонус: снижение = стресс',
    'lf_hf_ratio': 'симпато-вагальный баланс (30-й PSD)',
    'sdnn': 'общая вариабельность',

    # ЭКС (электрокожная проводимость) = EDA/GSR
    'eda_tonic': 'SCL (Skin Conductance Level): базовый тонус',
    'eda_phasic_scr': 'SCR (Skin Conductance Response): острый стресс',

    # Температура
    'peripheral_temp': 'снижение при симпатической активации (вазоконстрикция)',
    'core_wrist_temp': 'Oura Ring: базовая температура кожи запястья',

    # Движение
    'actigraphy': 'беспокойность, нарушения сна',
    'sway_variability': 'постуральная стабильность (тревога → нестабильность)'
}

Feature Engineering из физиологических данных

HRV фичи во временной и частотной областях:

def compute_hrv_stress_features(rr_intervals_ms, window_sec=300):
    """
    5-минутное окно — стандарт для HRV анализа (Task Force 1996)
    """
    rr = np.array(rr_intervals_ms)

    # Временные метрики
    time_features = {
        'rmssd': np.sqrt(np.mean(np.diff(rr)**2)),
        'sdnn': np.std(rr),
        'pnn50': np.mean(np.abs(np.diff(rr)) > 50),
        'mean_rr': np.mean(rr),
        'cv_rr': np.std(rr) / np.mean(rr)  # coefficient of variation
    }

    # Частотные метрики (PSD через Welch)
    from scipy.signal import welch
    f, psd = welch(rr - np.mean(rr), fs=4.0, nperseg=256)  # upsampled to 4 Hz

    lf_mask = (f >= 0.04) & (f < 0.15)
    hf_mask = (f >= 0.15) & (f < 0.40)

    lf_power = np.trapz(psd[lf_mask], f[lf_mask])
    hf_power = np.trapz(psd[hf_mask], f[hf_mask])

    freq_features = {
        'lf_power_ms2': lf_power,
        'hf_power_ms2': hf_power,
        'lf_hf_ratio': lf_power / (hf_power + 1e-8),
        'total_power': np.trapz(psd, f)
    }

    return {**time_features, **freq_features}

EDA обработка:

import neurokit2 as nk

def process_eda_signal(eda_raw, sampling_rate=64):
    """
    neurokit2: разложение EDA на tonic (SCL) + phasic (SCR) компоненты
    """
    signals, info = nk.eda_process(eda_raw, sampling_rate=sampling_rate)

    return {
        'scl_mean': signals['EDA_Tonic'].mean(),
        'scr_count': len(info['SCR_Onsets']),  # число острых стресс-реакций
        'scr_amplitude_mean': signals['SCR_Amplitude'].mean(),
        'scr_recovery_time': signals['SCR_RecoveryTime'].mean()
    }

Модели детекции стресса

Binary Stress Classification:

from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import StandardScaler

# Таргет: стресс (1) / нет стресса (0) — лабораторные метки (TSST протокол)
# Обучающие данные: WESAD, DEAP, DREAMER датасеты
features = ['rmssd', 'lf_hf_ratio', 'scl_mean', 'scr_count', 'peripheral_temp',
            'actigraphy_std', 'mean_hr', 'hour_of_day', 'activity_level']

stress_clf = RandomForestClassifier(n_estimators=200, class_weight='balanced')
stress_clf.fit(scaler.fit_transform(X_train), y_train)

Personalized baseline: Стресс-реакция индивидуальна. Абсолютное значение RMSSD = 30 мс может быть нормой для одного человека и низким для другого. Нормализация к персональному baseline (скользящее среднее 2-недель):

def personalized_stress_score(current_hrv, personal_baseline_hrv):
    """
    Относительное отклонение от персонального baseline
    Более интерпретируемо, чем абсолютные значения
    """
    hrv_deviation = (current_hrv['rmssd'] - personal_baseline_hrv['rmssd_mean']) / personal_baseline_hrv['rmssd_std']
    return -hrv_deviation  # инвертируем: снижение HRV = рост стресса

Мультимодальная fusion:

def fuse_modalities(hrv_features, eda_features, actigraphy_features):
    """
    Late fusion: каждая модальность → свой score → взвешенная сумма
    Плюс: надёжнее при отсутствии одной модальности (нет EDA сенсора)
    """
    hrv_score = hrv_stress_model.predict_proba([hrv_features])[0][1]
    eda_score = eda_stress_model.predict_proba([eda_features])[0][1]
    activity_score = activity_stress_model.predict_proba([actigraphy_features])[0][1]

    final_score = 0.45 * hrv_score + 0.35 * eda_score + 0.20 * activity_score
    return final_score

Мониторинг настроения и депрессии

Digital Phenotyping из смартфона:

  • Screen time patterns: чрезмерное использование или полная пассивность
  • Mobility patterns (GPS): снижение движения при депрессии
  • Social interactions: звонки, сообщения — сокращение при изоляции
  • Sleep patterns: нарушения из акселерометра

PHQ-9 дигитализация: Опросник депрессии PHQ-9 → выявление корреляций с пассивными сенсорными данными → предсказание высокого балла по PHQ-9 без заполнения анкеты.

Ограничения и этика

Точность: Стресс — субъективный конструкт. Лабораторный стресс (TSST, Stroop) ≠ реальный жизненный стресс. Модели, обученные на lab data, генерализуются хуже на naturalistic settings.

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

GDPR/конфиденциальность: Психологические данные = специальная категория по GDPR (Art. 9). Требуется явное информированное согласие, минимизация данных, обработка только на edge по возможности.

Bias: Обучающие данные преимущественно — студенты западных университетов. Генерализация на другие популяции не гарантирована.

Сроки: HRV pipeline + персональный baseline + базовый stress score + мобильное приложение — 4-5 недель. EDA fusion, depressive mood modeling, digital phenotyping, privacy-preserving edge processing — 3-4 месяца.