Итак, ничего сложного, и абсолютный пример использования для начинающих о том, как использовать машинное обучение для создания абсолютно простых прогнозов.
На прошлой неделе я отправился в 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 могла их осмыслить, является гораздо более важной задачей в этой области.