Как я обучал компьютер предсказывать, сколько будут спать мои 4-месячные сыновья

3340
1

Разработчик Тайлер ЛУНд — счастливый отец двух 4-месячных сыновей-близнецов. Но как и многие родители грудных младенцев, Тайлер мечтает наконец выспаться. Чтобы вычислить, как увеличить продолжительность сна у детей, Тайлер задействовал алгоритмы машинного обучения и рассказал о своем опыте в блоге.

Около месяца тому я попробовал провести A/B-тестирование, чтобы проверить, как различные приемы или же вводные параметры могут влиять на сон наших близнецов-сыновей и опосредованно — на наш сон. Таким образом я выяснил, что паттерны сна были довольно беспорядочными и не нашел ничего, что бы сильно коррелировало с увеличением длительности сна. Затем дети естественным путем сами стали спать больше.

toddlers1

Сейчас, когда им четыре месяца, они вошли в довольно распространенную, но редко обсуждаемую фазу уменьшения длины сна. Я опять понял, что отчаянно не высыпаюсь. Так что я попробовал еще одну компьютерную технику, чтобы вычислить паттерн — машинное обучение.

Машинное обучение — это дисциплина компьютерных наук, которая разрабатывает методы «обучения» компьютеров или программ без того, чтобы предоставлять им конкретные инструкции. В обычном программировании я бы задал компьютеру последовательность команд для исполнения, опираясь на логику принятия решений о вычислениях исходя из вводных данных, но программа никогда бы не смогла сойти с этих четко определенных рельс.

И хотя такое описание по звучанию больше напоминает мотивы из «Терминатора», чем правду, машинное обучение позволяет взять множество «обучающих» данных и использовать их как базу для прогнозирования. Оно наращивает популярность в технологической отрасли, но в большинстве случаев его используют для предсказаний покупательского поведения и рекомендаций, искусственного интеллекта, и самое интересное — для категоризации и распознавания картинок и картин — в частности, это делал Google.

Мне не доводилось видеть, чтобы его использовали в помощь родителям.

Благодаря бухгалтерскому образованию моей жены и нашим личностям типа А мы детально документируем все нюансы приема пищи и сна у детей. Помните эту таблицу?

table_s

Используя эти данные, я вознамерился отыскать оптимальную комбинацию вводных параметров. В этом случае я анализировал пищу за день, время последнего кормления, количество еды, съеденной в последнее кормление, чтобы определить, что именно приводит к более длительному сну наших мальчиков.

И самое прекрасное — всю сложную работу за меня выполнил компьютер. Плюс у нас было вдвое больше данных по этим паттернам, поскольку детей-то тоже двое.

Существует несколько шикарных библиотек по машинному обучению, доступных на различных языках программирования. И хотя я в основном использую в работе Java и Javascript, я выбрал sklearn — библиотеку на Python. Я знаком с этим языком, его гибкость казалась идеальным инструментом для решения данной задачи. По этой библиотеке есть множество мануалов и хорошей документации.

Мой код по этой задаче вы можете посмотреть на GitHub.

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

Собираю данные, пишу программу

screenshot_26

Я также принял во внимание некоторую интересную статистику. К примеру, в среднем мы давали мальчикам 27,5 унций (примерно 780 г) еды в день, чаще всего укладывали их в 7:25, перед сном они получали 5,22 унций (около 148 г) еды, спали в среднем по 9 часов. Также оказалось, что дети спали в среднем более 10 часов в 75% случаев. Неплохо, совсем неплохо. Но я знал, что немного исследований — и мы сможем улучшить результат.

screenshot_28

Используя эти данные, я отметил каждый параметр в сравнение со временем сна.

screenshot_29

Можно видеть, что здесь нет очевидной корреляции, по крайней мере — линейной. Ближайшее к этому соотношение — зависимость между общим объемом еды и часами сна. Как ни странно, потребление большего объема еды приводит к сокращению сна.

Существует множество различных алгоритмов машинного обучения. Их в основном разделяют на линейные и нелинейные типы. Я скормил данные шести самым распространенным алгоритмам, чтобы проверить, насколько точным окажется каждый из них. Вот результаты.

screenshot_30

Вот те же результаты, но в более графической форме:

screenshot_31

Как видно, лучше всего справился метод опорных векторов (Support Vector Machine, SVM), хотя, конечно, разброс очень широк, а точность не достигает 50%, что достаточно плохо для прогнозирования. Это полностью объясняется псевдослучайной природой данных. Даже с подобными результатами я решил пытаться дальше, надеясь получить хоть какую-то идею.

Используя SVM, я обучил алгоритм на входящих данных. Сейчас с его использованием я мог предсказывать, сколько будут спать младенцы, основываясь на объеме потребленной еды за день, перед сном и времени отхода ко сну. К примеру, если давать им в день 28 унций (794 г), укладывать спать в 19:00 и при последнем приеме пищи давать им по 6 унций (170 г), это приведет к 8-часовому сну.

Выводы

С обученным алгоритмом я мог более точно предсказывать, сколько времени будут спать младенцы. Что еще важнее, я мог наблюдать за кривыми трендов по этим показателям и понимать, какой тип поведения приведет к увеличению периода сна. Как ни странно, если мальчики засыпали раньше, и кушали меньше, это вело к более длительному сну. Это может объясняться множеством факторов, моя теория — в том, что меньше еды приводит к меньшему содержанию газа в кишечнике, меньшему сокращению желудка в голодном состоянии, а значит — к более спокойному сну. Вспомните, сколько раз вы объедались на ночь, а затем просыпались посреди ночи и желудок сводило от голода?

К сожалению, как и в случае с A/B-тестами, оказалось, что ни один из отдельных параметров не оказывает прямое сильное влияние на сон. Предполагаю, что в таком случае кто-то уже открыл бы его и заработал миллионы.

Метод машинного обучения может помочь найти некоторые из подобных трендов и зависимости между переменными, что приводит к более точным результатам, чем A/B-тесты или метод проб и ошибок. Но результаты все еще далеки от идеальных. Максимум, который я смог выжать из этих данных — 41% точность прогнозов. Иными словами, они ошибаются чаще, чем не ошибаются. Возможно, помог бы больший объем данных, но мы пока не планируем заводить тройню.

Все же, эти результаты лучше, чем ничего, и демонстрируют потенциал машинного обучения и data science. Я, к примеру, предпочитаю принимать решения, исходя из данных, а не интуиции. И если эти данные подтверждают мои догадки, я меньше переживаю о нашем подходе к родительству.

Оставить комментарий

Комментарии | 1

Поиск