ПОЛНЫЙ ПРОЕКТ НАУКИ О ДАННЫХ
Завершить проект Data Science: понимание данных
Проект прогнозирования количества заказов в производственной компании, котирующейся на бирже, на основе Global Management Challenge.
Это первая статья из серии Проект по науке о данных. Я хотел бы представить путеводитель по миру машинного обучения. Я опишу основные теоретические предположения, а также практические решения. Являетесь ли вы новичком и только интересуетесь темой искусственного интеллекта или уже работаете Data Scientist, я думаю, что моя статья дойдет до каждого из вас и мотивирует продолжать вашу работу. Каждая статья была разделена на этапы процесса Data Science в соответствии с методологией Общеотраслевого стандартного процесса интеллектуального анализа данных:
1. Бизнес-понимание
2. Данные Понимание— вы здесь
3. Подготовка данных
4. Моделирование
5. Оценка
6. Развертывание
Весь проект вы найдете на GitHub.
Наша цель бизнес-задачи — правильно спрогнозировать количество заказов на продукцию, поэтому имеющиеся у нас данные — это материал, из которого будет создано решение нашей задачи. На этом этапе нам нужно получить данные, а затем оценить их полезность.
Мы должны понимать их преимущества и ограничения, поскольку согласно принципу GIGO (Garbage In Garbage Out) с использованием плохой модели данных результаты также будут низкого качества. Данные должны быть репрезентативными, а также полезными для решения нашей проблемы.
Получить данные
В предыдущей статье я упомянул, что отчеты в электронных таблицах. Мы выбрали переменные, которые, согласно бизнес-анализу, влияют на количество заказываемых товаров. Несколько раз случалось, что данные приходили из предыдущих отчетов. Это, очевидно, логично, потому что прошлое влияет на будущее, а не только на нашу текущую деятельность. Более того, как вы можете видеть, переменные различаются между рынками. Мы использовали рекламу продукта и рекламу имиджа (корпоративную), комиссию и поддержку агентов и дистрибьюторов и их количество. Далее для интернета процент неудачных посещений сайта и развитие сайта. Вопросы работы компании, такие как количество учебных дней для сотрудников. Бюджет на управление или время сборки продукта. Более того, отставание по заказам, такое появлялось в ситуации, когда заказов было больше, чем реально было в наличии, оценка товара нашими покупателями и цена, по которой мы хотели продать товар. Мы заметили, что в ходе конкурса прокручивалось 4 разных истории, которые мы также приняли в качестве переменной и цикла принятия решений, чтобы иметь информацию о сезонности. Выбирая переменные, мы имели в виду, чтобы предотвратить явление просмотра вперед. Это данные, которые известны после получения нашей цели, поэтому они выглядят очень ценными (сильная корреляция с прогнозируемой переменной), но на самом деле бесполезны. Мы указали, в какой строке они находятся в отчете и откуда взяты данные из последнего отчета (с) или предыдущего (р).
У нас есть 417 отчетов, 20 из которых — это истории, с которых команды начинают, потому что, как я упоминал ранее, было 4 сценария, а в истории было 5 отчетов. Мы написали скрипт и собрали все отчеты в файлы с переменными по продуктам и направлениям продаж.
Я не решился создать единую модель, и это потому, что между областями иногда на количество заказов влияли другие переменные. В итоге было создано 3 набора данных в зависимости от того, к какой области относились продажи. Благодаря такому подходу у нас было больше данных, чем количество отчетов.
Исследование
Давайте посмотрим на наши данные и посмотрим на первые пять строк каждого набора данных.
Давайте проверим количество строк в каждом из наборов данных, какие типы переменных есть и все ли значения не равны нулю.
RangeIndex: 1190 entries, 0 to 1189 Data columns (total 17 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 NumOrders 1190 non-null int64 1 History 1190 non-null category 2 Cycle 1190 non-null category 3 DirAdv 1190 non-null float64 4 CorpAdv 1190 non-null float64 5 Commission 1190 non-null float64 6 AgentsDistr 1190 non-null int64 7 Training 1190 non-null float64 8 ManagBudget 1190 non-null float64 9 BacklogOrders 1190 non-null int64 10 RandD 1190 non-null float64 11 Price 1190 non-null float64 12 AssemblyTime 1190 non-null float64 13 MarketShares_p 1190 non-null float64 14 MeanPrice 1190 non-null float64 15 NumSales_p 1190 non-null int64 16 Product 1190 non-null category dtypes: category(3), float64(10), int64(4) memory usage: 134.3 KB
RangeIndex: 1191 entries, 0 to 1190 Data columns (total 17 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 NumOrders 1191 non-null int64 1 History 1191 non-null category 2 Cycle 1191 non-null category 3 DirAdv 1191 non-null float64 4 CorpAdv 1191 non-null float64 5 Commission 1191 non-null float64 6 AgentsDistr 1191 non-null int64 7 Training 1191 non-null float64 8 ManagBudget 1191 non-null float64 9 BacklogOrders 1191 non-null int64 10 RandD 1191 non-null float64 11 Price 1191 non-null float64 12 AssemblyTime 1191 non-null float64 13 MarketShares_p 1191 non-null float64 14 MeanPrice 1191 non-null float64 15 NumSales_p 1191 non-null int64 16 Product 1191 non-null category dtypes: category(3), float64(10), int64(4) memory usage: 134.4 KB
RangeIndex: 1187 entries, 0 to 1186 Data columns (total 18 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 NumOrders 1187 non-null int64 1 History 1187 non-null category 2 Cycle 1187 non-null category 3 DirAdv 1187 non-null float64 4 CorpAdv 1187 non-null float64 5 Support 1187 non-null float64 6 FailedVisits 1187 non-null float64 7 Training 1187 non-null float64 8 ManagBudget 1187 non-null float64 9 WebDev 1187 non-null float64 10 BacklogOrders 1187 non-null int64 11 RandD 1187 non-null float64 12 Price 1187 non-null float64 13 AssemblyTime 1187 non-null float64 14 MarketShares_p 1187 non-null float64 15 MeanPrice 1187 non-null float64 16 NumSales_p 1187 non-null int64 17 Product 1187 non-null category dtypes: category(3), float64(12), int64(3) memory usage: 143.2 KB
Разница в количестве строк для каждого набора данных связана с тем, что некоторые команды не решили продавать товары на определенной территории. Для каждого набора данных почти 1120 примеров, что означает, что это довольно маленький набор с таким количеством переменных. В целом, чем больше выборка, тем лучше репрезентативность генеральной совокупности при условии, что выборка не является предвзятой. Нет ненулевого значения, но это не означает, что все данные верны. В данных могут быть ошибки. В следующих анализах мы это проверим. Переменные History, Cycle и Product являются категориальными. Остальные переменные являются числовыми, и мы представим наиболее важные показатели для числовых переменных.
Большинство заказов было в Европе, а меньше всего в районе Нафты. Мы можем сделать аналогичные выводы из данных по каждой области. 75-й процентиль значительно меньше максимального значения, здесь можно ожидать выбросов — вероятно, такая ситуация была, когда очень хорошая команда играла в Global Management Challenge или команда давала высокие рекламные значения и/или низкие цены. В рекламе также показаны выбросы, близкие к максимальным. У половины команд не было BacklogOrders, а у других было очень мало, но были и крайности. Самая большая проблема связана с MarketShares_p, где много нулевых значений. Это невозможная ситуация, потому что если команда продавала продукты, у нее должны быть доли рынка. Отсутствие данных связано с тем, что команде пришлось купить такую услугу, чтобы получить эту информацию. Многие команды не решились на это, несмотря на то, что это ценная информация. На этапе подготовки данных нам придется разобраться с этой проблемой.
Посмотрите, какой процент составляют значения, равные 0, которые мы считаем ложными.
In Europe dataset is 50.59 of values equal to 0. In Nafta dataset is 50.63 of values equal to 0. In Internet dataset is 50.8 of values equal to 0.
Незначительные различия возникают из-за различий в количестве рядов. Половина данных отсутствует, а данные очень ценны, поскольку показывают положение компании на рынке.
Сгруппируйте данные по продуктам.
набор данных ➜ data_Europe| данные_Нафта | данные_Интернет
Продукт 1 — самый продаваемый, а Продукт 3 — самый редкий. Район Нафты — это район, где на рекламу тратится меньше всего денег. Это потому, что когда мы начинаем игру в каждом сценарии, это развивающаяся область, где бизнес недавно начался. Некоторые переменные одинаковы, и это потому, что они не различаются с точки зрения продуктов и областей. Также следует отметить, что средняя цена продукции команд из группы самая высокая в Интернете.
Номер цикла и история являются переменными, которые, по-видимому, хорошо отражают сезонность. При этом с каждым последующим циклом количество заказов увеличивается (расширение компании), хотя бывают и отклонения от этого правила (обвалы рынка и т.п.).
Блочная диаграмма — это другой вид блочной диаграммы, это удобная и наглядная форма представления основных статистических данных. Он состоит из коробки и усов. Границы ящика определяются по нижнему и верхнему квартилю, поэтому значение не менее 25% и одновременно не более 75% наблюдений. Таким образом, ширина поля представлена IQR = Q3 — Q1 (межквартильный диапазон). Внутри коробки всегда есть медиана. Длина усов составляет 1,5 IQR. Более высокие или более низкие значения называются выбросами. Конечно, может случиться так, что таких выбросов в выборке нет, тогда длины усов равны минимальному и максимальному элементу выборки соответственно.
Хорошо, мы видим, что данные между областями очень похожи, самые важные различия связаны с другими переменными и разным спросом. Далее анализ будет касаться только европейской области, в этом наборе мы также будем заниматься подготовкой данных, моделированием и реализацией. Если результаты будут правильными, можно будет реализовать это решение в других областях. Давайте посмотрим, как часто появляются категориальные данные.
Данные не сбалансированы по истории, поэтому большинство отчетов из истории 2 и меньше всего из истории 1. С каждым последующим циклом у нас меньше отчетов, потому что некоторые команды не сохранили последние отчеты.
Парная диаграмма – это точечная диаграмма для всех комбинаций числовых переменных в парах. В отношении переменной product мы разделили наблюдения на подгруппы. При этом для каждой переменной были построены гистограммы с оценкой плотности, то есть эмпирического распределения анализируемой количественной переменной.
Представлена тепловая карта с линейной корреляцией Пирсона для Европы. 1 означает, что баллы указывают на сильную положительную линейную корреляцию, а -1 — на сильную отрицательную корреляцию. 0 означает отсутствие линейной корреляции, что не означает, что нет другой нелинейной корреляции. Мы можем оценить количество тесно связанных переменных.
PCA используется для уменьшения размеров. Избавляемся от ненужных данных, поэтому убираем шум. Мы группируем функции, которые представляют одну и ту же информацию. Я показал, какому количеству измерений соответствует процент дисперсии. 90% дисперсии/информации можно описать с половиной числа переменных.
У нас уже есть представление о переменных. Если вы считаете, что я мог бы сделать что-то лучше или добавить что-то к этому — напишите, пожалуйста.
Увидимся в следующем посте!