Взломать сон моих маленьких близнецов с помощью машинного обучения и анализа данных

Месяц назад Я попробовал провести A / B-тестирование, чтобы увидеть, как различные методы лечения или входные параметры могут привести к более длительному сну для наших близнецов - и, конечно же, нас самих. Благодаря этому я обнаружил, что режимы сна были довольно беспорядочными и не обнаружил ничего, что сильно коррелировало бы с увеличением количества сна. Шло время, и они начали в основном сами по себе, естественно. Однако теперь, когда им исполнилось четыре месяца, у них началась, по-видимому, обычная, но редко обсуждаемая фаза регресса сна. Я снова обнаружил, что мне отчаянно нужен сон. Был ли я, как указывалось в одном из комментариев к предыдущему посту, искал, чтобы найти что-нибудь, как бы мне ни хотелось больше спать? да. Да я была. Поэтому я обратился к другому методу информатики - машинному обучению.

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

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

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

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

Если интересно, можете найти мой код на гитхабе.

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

Собираем все вместе и кодируем

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

total-food last-feed-time last-feed-amount hours-of-sleep
count 62.000000 62.000000 62.000000 62.000000
mean 27.491935 7.455645 5.225806 9.084677
std 2.001008 0.331181 0.857357 1.726092
min 24.000000 6.750000 2.000000 3.500000
25% 26.000000 7.250000 5.000000 8.000000
50% 27.000000 7.375000 5.000000 9.000000
75% 29.000000 7.687500 6.000000 10.187500
max 32.000000 8.500000 7.000000 13.500000

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

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

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

Logistic Regression: 0.303333 (0.211056)
Linear Discriminant Analysis: 0.376667 (0.157797)
K Neighbors Classifier: 0.286667 (0.073333)
Decision Tree Classifier: 0.356667 (0.196667)
GaussianNB: 0.183333 (0.076376)
Support Vector Machine: 0.410000 (0.200028)

Или в более пиктографической форме

Здесь вы можете увидеть, что алгоритм машины опорных векторов явно показал лучшие результаты по сравнению с данными, хотя диапазон очень широк, а среднее значение не намного лучше, чем у других. Ни у кого нет даже 50%, что очень плохо для прогнозирования. Это полностью связано с псевдослучайным характером данных. Даже с такими результатами я решил двигаться вперед, надеясь хоть немного пролить свет на это.

Используя SVM, я обучил алгоритм входным данным. Используя это, я мог теперь предсказать, сколько мы будем спать, исходя из количества пищи, принятой за день, когда мы укладываем их спать, и сколько мы их кормили при последнем кормлении. Например, если дать им 28 унций, уложить их спать в 7 и дать 6 унций во время последнего кормления, это приведет к довольно плохому 8-часовому сну.

Выводы

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

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

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