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

На прошлой неделе я отправился в DMV по поводу передачи права собственности на мою машину из Калифорнии в Техас. И я понял, что у меня совсем разряжен аккумулятор телефона. Итак, решили просто в очереди ничего не делать и наблюдать, как быстро движется очередь. После наблюдения в течение нескольких минут стало совершенно ясно, что он движется очень непредсказуемо. Иногда он движется в течение 2 минут, а затем не движется в течение 10 минут. Поскольку мне больше нечего было делать, я решил просто записывать время всякий раз, когда очередь движется и люди впереди меня. Так, например, если я насчитал 26 человек впереди меня и вижу, что человек получает свою очередь через 2 минуты, это означает, что моя очередь займет 50 минут. И это то, что я делал в течение оставшихся нескольких часов, пока не подошла моя очередь. Вот как выглядят эти заметки:

Когда я пришел домой, я подумал представить эти числа в простой модели линейной регрессии. На практике можно было бы предсказать, стоит ли стоять в очереди, подсчитав количество людей впереди и время, когда стойка DMV закрывается в течение дня. Я использовал блокнот jupyter и библиотеку scikit-learn, чтобы поместить эти числа в модель регрессии. Код выглядит следующим образом:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
X = np.array([[25], [19], [15], [14], [10], [9],   [6], [5], [4], [3], [2], [1]])
y = np.array([[336],[294],[84], [130], [72], [136], [25], [8], [9], [2], [7], [11]])
reg = LinearRegression().fit(X, y)

Супер базовые вещи, как я сказал в начале этого поста. Это просто размещение чисел в качестве координат X и Y и подгонка их к модели для прогнозов. Я также построил график с использованием библиотеки matplotlib для некоторой визуализации, которая выглядит следующим образом с кодом:

plt.plot(X,y)
plt.xlabel('People ahead of me')
plt.ylabel('Estimated Min to get turn')
plt.show()

Это ясно показывает, что нет прямой корреляции между количеством людей впереди меня и временем, которое требуется DMV для обслуживания каждого клиента. Итак, чтобы использовать эту модель, предположим, что впереди 40 человек. Я буду использовать ниже, чтобы найти предполагаемые часы, которые это займет:

print(reg.predict(np.array([[40]]))/60, 'hours')
[[8.8225934]] hours

Таким образом, это явно займет более 8 часов, чтобы получить очередь, даже если эта ситуация в начале рабочего дня. Продолжительность его для 36 человек составляет 7,8 часа. Что означает, что DMV может обрабатывать 36 клиентов в день.

Между прочим, как только я получил свою очередь, я наконец понял, почему движение линии было таким неустойчивым. Было 4 агента, но в течение 15 минут я увидел, что по крайней мере один агент все время был в перерыве, и, следовательно, эффективное количество сократилось до 3. Далее, агент, который меня обслуживал, был вызван другим агентом для обсуждения специального дело с клиентом, которого она обслуживала. Агент, обслуживающий меня, потратил на это более 5 минут, поэтому я просто стоял там.

В общем, мне было довольно весело с этим.

ПРИМЕЧАНИЕ. Цель этого поста — показать интересную часть машинного обучения. На самом деле ситуации намного сложнее и обычно требуют гораздо большего количества точек данных и моделей более высокого порядка, чтобы делать более практичные прогнозы. На самом деле, большую часть времени получение правильных данных и их формирование таким образом, чтобы модель ML могла их осмыслить, является гораздо более важной задачей в этой области.