Реализация AI-рекомендаций по здоровью на основе данных в мобильном приложении
Большинство health-приложений показывают пользователю цифры — и тот закрывает приложение, так и не изменив привычек. Мы меняем сценарий: вместо «вот ваши данные» даём «вот что эти данные значат для вас сегодня». По данным HealthKit, средняя ежедневная активность пользователя — 5 423 шага, сон — 7.1 ч. На основе этих данных rule engine генерирует 12–20 кандидатов в день, ML-ранжирование выбирает 3–5 наиболее релевантных. Например, если пульс покоя выше 80 bpm и сон менее 6.5 ч, рекомендация — снизить интенсивность тренировок.
В этой статье я расскажу, как мы строим систему рекомендаций: от сбора данных до доставки push-уведомлений. Вы узнаете, почему rule engine — не пережиток, а фундамент, и как ML добавляет персонализацию без потери прозрачности. Мы разработали 15+ health-приложений, 5+ лет опыта, один из проектов достиг 500 000+ установок. Если вам нужна аналогичная система, свяжитесь с нами — мы поможем спроектировать и внедрить её.
Почему rule engine — основа персонализированных рекомендаций?
Rule-based подход — не устаревший, а практичный. Правила прозрачны, тестируемы, не требуют датасета для обучения. ML поверх правил добавляет персонализацию в ранжировании. Комбинированные условия важны: пульс покоя 85 bpm сам по себе может быть нормой, но в сочетании с недосыпом — маркер перетренированности.
Архитектура системы рекомендаций
Персонализированные рекомендации по здоровью — это pipeline из нескольких слоёв, а не один алгоритм. В таблице ниже — основные компоненты и их назначение.
| Слой | Назначение | Пример технологии |
|---|---|---|
| Сбор данных | Получение сырых показателей | HealthKit, Health Connect, Core Bluetooth |
| Профиль пользователя | Возраст, цели, поведенческие паттерны | Realm / Core Data |
| Feature engineering | Агрегация в осмысленные метрики | Swift Combine / Kotlin Flow |
| Rule engine | Прозрачные условия с приоритетами | Кастомный на Swift/Kotlin |
| ML-ранжирование | Персонализация кандидатов | Gradient boosting (XGBoost) |
| Отображение | In-app / push с оптимальным таймингом | UNNotification / FCM |
Данные: HealthKit как единая точка на iOS
class HealthDataAggregator {
private let store = HKHealthStore()
func weeklyStats() async throws -> HealthWeekSnapshot {
async let steps = fetchSum(.stepCount, days: 7)
async let sleepHours = fetchCategorySamples(.sleepAnalysis, days: 7)
async let restingHR = fetchAverage(.restingHeartRate, days: 7)
async let activeEnergy = fetchSum(.activeEnergyBurned, days: 7)
return try await HealthWeekSnapshot(
avgDailySteps: steps / 7,
avgSleepHours: sleepHours,
avgRestingHR: restingHR,
totalActiveKcal: activeEnergy
)
}
}
На Android — Health Connect SDK с HealthConnectClient.readRecords(StepsRecord::class) для запроса шагов за период. Мы также подключаем сторонние устройства через Core Bluetooth на iOS и BLE на Android, чтобы получать данные с весов, тонометров и фитнес-браслетов.
Как ML улучшает персонализацию?
Rule engine генерирует список кандидатов-рекомендаций. ML-модель ранжирует их по вероятности выполнения конкретным пользователем. Используем gradient boosting на фичах: исторический CTR, паттерн дня недели, streak выполнения. Обучаем на implicit feedback: показано → открыто → выполнено (данные из HealthKit).
Как подбирается время для push-уведомлений?
Правильный момент важнее содержания. «Ложитесь спать пораньше» в 20:00 работает, в 23:30 — нет.
func scheduleRecommendation(_ rec: Recommendation) {
let content = UNMutableNotificationContent()
content.title = rec.title
content.body = rec.shortBody
content.sound = .default
let bestTime = optimalDeliveryTime(for: rec, userSchedule: userProfile.typicalSchedule)
let trigger = UNCalendarNotificationTrigger(
dateMatching: Calendar.current.dateComponents([.hour, .minute], from: bestTime),
repeats: false
)
let request = UNNotificationRequest(identifier: rec.id, content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request)
}
optimalDeliveryTime анализирует паттерны пользователя: время открытия приложения, сон, тренировки. Привязка к контексту: если CMMotionActivityManager показывает, что пользователь идёт — рекомендацию по активности не показываем.
Принципы эффективных рекомендаций
Одна конкретная рекомендация в день лучше пяти общих. «Пройдите 2 000 шагов до 18:00, у вас сейчас 1 200» — работает. «Больше двигайтесь» — нет. Привязка к контексту и персонализация — ключевые факторы вовлечения. Мы используем A/B тестирование, чтобы отбирать наиболее эффективные форматы и контент.
Пошаговый процесс работы над рекомендациями
- Анализ источников данных и проектирование схемы HealthKit/Health Connect.
- Разработка 20–50 правил на основе медицинских протоколов и типовых сценариев.
- Реализация ML-ранжирования на синтетических данных для обучения.
- Система доставки: in-app виджеты + push с оптимальным таймингом.
- A/B тестирование эффективности (минимум 2 недели).
- Документация API и обучение команды администрированию правил.
Что входит в работу
- Документация API по интеграции и управлению правилами.
- Обучение команды заказчика администрированию и доработке рекомендаций.
- Поддержка после запуска в течение 3 месяцев.
- Гарантия на код: исправление ошибок в рамках заданной архитектуры.
Ориентиры по срокам
| Этап | Срок |
|---|---|
| Rule-based MVP с базовыми рекомендациями | 1–2 недели |
| Полная система с ML-ранжированием и таймингом | 3–5 недель |
| A/B тестирование и доработка | +2 недели |
Точная оценка зависит от сложности интеграции и количества источников данных. Свяжитесь с нами для консультации — мы проанализируем ваш проект за 1 день. Получите индивидуальное предложение, позвонив нам.







