Bertelsmann Avarato: сегментация клиентов и прогнозирование потенциальных клиентов

Пошаговое руководство по проекту Bertelsmann Avarato по науке о данных — Сегментация клиентов и прогнозирование потенциальных клиентов.

Введение

Один из клиентов Bertelsmann Avarato, компания, занимающаяся доставкой по почте, расширяется из одного города Германии в другой и ищет информацию, которая поможет оптимизировать их усилия и инвестиции.

Нам даны 2 основных набора данных, Azdias и клиенты, и 2 файла Excel, которые объясняют атрибуты, наборы данных, содержащие информацию об общей популяции и информацию о предыдущих клиентах, и 2 файла Excel, объясняющие все атрибуты и возможные значения, и их значения. Наряду с этим нам также предоставляется набор данных, в котором у нас есть ответы клиентов о покупках, которые мы будем использовать для построения модели контролируемого обучения.

  • Udacity_AZDIAS_052018.csv: Демографические данные для населения Германии в целом; 891 211 лиц (строк) x 366 черт (столбцов).
  • Udacity_CUSTOMERS_052018.csv: Демографические данные клиентов компании, занимающейся доставкой по почте; 191 652 лица (строки) х 369 признаков (столбцы).
  • Udacity_MAILOUT_052018_TRAIN.csv: демографические данные для лиц, ставших мишенями маркетинговой кампании; 42 982 лиц (строки) х 367 (столбцы).
  • Udacity_MAILOUT_052018_TEST.csv: Демографические данные для лиц, ставших мишенями маркетинговой кампании; 42 833 лиц (строки) х 366 (столбцы).

Этот набор данных недоступен для публичной загрузки, и я удалю набор данных после того, как закончу и отправлю свой проект в Udacity.

Ссылка на GitHub и код приведены внизу этой статьи.

Подход

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

Часть 1: Отчет о сегментации клиентов

Мы начнем проект с использования метода обучения без учителя (Kmeans) для анализа атрибутов постоянных клиентов и населения в целом для создания сегментов клиентов.

0.0 Загрузка необходимых библиотек

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

0.1 Загрузка наборов данных

Затем мы используем pd.read_csv() из библиотеки pandas для загрузки наборов данных в блокнот, это может занять некоторое время, поскольку наборы данных огромны, мы можем использовать волшебную функцию под названием notify из блокнота jupyter, чтобы дайте нам знать, когда загрузка будет завершена.

1.0 Исследовательский анализ данных

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

В наборе данных клиента есть 3 дополнительных столбца {‘CUSTOMER_GROUP’, ‘ONLINE_PURCHASE’, ‘PRODUCT_GROUP’}

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

Изучение файлов Excel, чтобы увидеть, как мы можем их использовать

1.DIAS_info

2.DIAS_атрибут

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

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

Использование DIAS_attribute для поиска всех отсутствующих значений и обновления их в наборах данных azdias и клиентов.

Создание словаря, в котором ключ — это имя столбца, а значение — все значения со значением «неизвестно»

Это поможет нам создать словарь, в котором все столбцы являются ключами, а все значения, означающие отсутствующие значения, — значениями.

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

Как мы видим, количество значений np.nan увеличивается, поскольку мы обновили набор данных, заполнив np. nan на основе информации из DIAS_info.

Управление выбросами

Набор данных DIAS.info содержит информацию обо всех значениях, которые может иметь конкретный атрибут, на основе этой информации мы можем классифицировать допустимые значения от выбросов.

Функция «get_unique_values ​​(df)» получает фрейм данных и создает словарь, в котором атрибуты являются ключами, а все уникальные значения, которые они содержат, — их значениями.

Затем мы пишем функцию «get_attributes_range(df)», чтобы получить фрейм данных и создать словарь, который имеет атрибуты в качестве ключей и правильные возможные значения, которые они могут хранить в качестве своих значений.

Функции get_difference() и get_validation() используются для обнаружения и классификации выбросов. Если вы проверите блокнот, вы увидите результат, напечатанный ниже.

Управление отсутствующими значениями

Колонка мудрая

missing_values() и deleting_missing_columns() — это две функции, которые мы будем использовать в этой записной книжке. три параметра, df-DataFrame, Percent- Минимальный порог, выше которого мы хотим видеть пропущенные значения, Delete- 0-не удалять столбцы, 1-удалить столбцы.

Мудрый ряд

Основываясь на анализе в блокноте, мы решили заполнить пропущенные значения средним значением для столбцов int и float и использовать bfill и ffill для других столбцов.

Как только мы заполним столбцы, формы набора данных изменятся,

Распределение

Проверка распределения столбцов в наборе данных,

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

Проклятие размерности

Наш набор данных имеет более 360 функций, прежде чем мы возьмем эти наборы данных для обучения наших моделей, нам необходимо убедиться, что мы применяем PCA — анализ основных компонентов к нашему набору данных и уменьшаем их для повышения точности и производительности.

PCA: анализ основных компонентов

PCA — это очень популярный метод, который помогает нам уменьшить количество столбцов, определяя чистую совокупную дисперсию, вносимую каждым столбцом, на основе того, что мы можем отбросить столбцы, которые не дают много информации.

Чтобы начать с PCA, нам нужно масштабировать наши функции, мы сделаем это, применив min max scaler,

Хорошей практикой является сохранение наших предварительно обработанных данных в виде отдельного CSV, чтобы мы могли восстановить нашу работу с того места, где мы остановились, поэтому давайте сохраним нашу тяжелую работу,

Это функция, которая инициирует PCA, сопоставляет предоставленные данные и возвращает компоненты PCA и преобразованные данные.

Эта функция отображает кумулятивную дисперсию, объясненную атрибутами в наборе данных, запуская ее на преобразованном наборе данных, который мы получаем.

Из графика можно сделать вывод, что 150 компонентов объясняют ~90% дисперсии.

Двигаясь вперед, мы уменьшим количество измерений до 150, поскольку они в совокупности дают 95+ процентов информации.

Теперь, когда у нас есть наборы данных, готовые к обработке и анализу, мы можем приступить к использованию неконтролируемой модели, такой как кластеризация K-средних, для кластеризации набора данных в группы.

Использование Kmeans

Чтобы использовать Kmeans, нам нужно определить количество кластеров, которые мы хотим создать (значение k), для этого мы построим кривую локтя.

На кривой локтя мы ищем точку, после которой уменьшение среднего расстояния не является существенным для увеличения значения K, и из графика совершенно очевидно, что после K=7 уменьшение среднего расстояния до центроида уменьшается. , поэтому, исходя из этого, мы считаем, что значение K равно 7.

Итак, мы инициализируем нашу модель Kmean с k = 7 и подгоняем полный набор данных azdias init. После завершения обучения мы прогнозируем набор данных клиента, используя только что созданную модель, для каждой строки в наборе данных наша модель классифицирует их в кластеры, обозначенные число от 0 до 6.

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

Наконец, мы построили наш анализ, используя гистограмму, чтобы визуализировать и увидеть взаимосвязь. Мы видим, что кластеры «0», «1», «5» и «6» имеют больший процент клиентов, чем население в целом, что означает, что население в целом, попадающее в эти кластеры, будет очень похоже на существующих клиентов и, скорее всего, станет ими.

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

Кластер 0

Values  \
D19_GESAMT_ONLINE_QUOTE_12  0.863962   
KBA13_ANTG2                 0.868198   
D19_VERSI_DATUM             0.875192   
PLZ8_ANTG2                  0.880153   
D19_BANKEN_ONLINE_DATUM     0.892242   
ORTSGR_KLS9                 0.892800   
EXTSEL992                   0.894953   
ONLINE_AFFINITAET           0.897524   
LNR                         0.912753   
D19_TELKO_DATUM             0.912831   
FINANZ_VORSORGER            0.917689   
D19_TELKO_OFFLINE_DATUM     0.963258   
D19_BANKEN_OFFLINE_DATUM    0.968765   
EWDICHTE                    0.971143   
WOHNDAUER_2008              0.971538   
D19_VERSI_OFFLINE_DATUM     0.983251   
DSL_FLAG                    0.987458   
D19_TELKO_ONLINE_DATUM      0.996606   
D19_VERSI_ONLINE_DATUM      0.996735   
STRUKTURTYP                 1.092753   

                                                                  Description  \
D19_GESAMT_ONLINE_QUOTE_12  amount of online transactions within all trans...   
KBA13_ANTG2                                                               NaN   
D19_VERSI_DATUM             actuality of the last transaction for the segm...   
PLZ8_ANTG2                            number of 3-5 family houses in the PLZ8   
D19_BANKEN_ONLINE_DATUM     actuality of the last transaction for the segm...   
ORTSGR_KLS9                                  classified number of inhabitants   
EXTSEL992                                                                 NaN   
ONLINE_AFFINITAET                                             online affinity   
LNR                                                                       NaN   
D19_TELKO_DATUM             actuality of the last transaction for the segm...   
FINANZ_VORSORGER                              financial typology: be prepared   
D19_TELKO_OFFLINE_DATUM     actuality of the last transaction for the segm...   
D19_BANKEN_OFFLINE_DATUM    actuality of the last transaction for the segm...   
EWDICHTE                          density of inhabitants per square kilometer   
WOHNDAUER_2008                                            length of residenca   
D19_VERSI_OFFLINE_DATUM     actuality of the last transaction for the segm...   
DSL_FLAG                                                                  NaN   
D19_TELKO_ONLINE_DATUM      actuality of the last transaction for the segm...   
D19_VERSI_ONLINE_DATUM      actuality of the last transaction for the segm...   
STRUKTURTYP                                                               NaN   

                           Information level  
D19_GESAMT_ONLINE_QUOTE_12         Household  
KBA13_ANTG2                              NaN  
D19_VERSI_DATUM                    Household  
PLZ8_ANTG2                              PLZ8  
D19_BANKEN_ONLINE_DATUM            Household  
ORTSGR_KLS9                        Community  
EXTSEL992                                NaN  
ONLINE_AFFINITAET                     RR1_ID  
LNR                                      NaN  
D19_TELKO_DATUM                    Household  
FINANZ_VORSORGER                      Person  
D19_TELKO_OFFLINE_DATUM            Household  
D19_BANKEN_OFFLINE_DATUM           Household  
EWDICHTE                           Postcode   
WOHNDAUER_2008                     Household  
D19_VERSI_OFFLINE_DATUM            Household  
DSL_FLAG                                 NaN  
D19_TELKO_ONLINE_DATUM             Household  
D19_VERSI_ONLINE_DATUM             Household  
STRUKTURTYP                              NaN

Кластер 1

Values  \
D19_TELKO_DATUM           0.901445   
KBA05_ANTG1               0.902804   
LNR                       0.913521   
KBA05_GBZ                 0.924788   
ALTER_HH                  0.939921   
D19_TELKO_OFFLINE_DATUM   0.955828   
D19_BANKEN_OFFLINE_DATUM  0.964354   
LP_STATUS_GROB            0.968592   
DSL_FLAG                  0.972077   
D19_VERSI_OFFLINE_DATUM   0.978844   
FINANZ_MINIMALIST         0.980407   
WOHNDAUER_2008            0.983777   
D19_VERSI_ONLINE_DATUM    0.996006   
D19_TELKO_ONLINE_DATUM    0.996528   
ONLINE_AFFINITAET         1.011471   
LP_LEBENSPHASE_FEIN       1.038416   
LP_STATUS_FEIN            1.041598   
LP_LEBENSPHASE_GROB       1.061164   
LP_FAMILIE_FEIN           1.065723   
LP_FAMILIE_GROB           1.108554   

                                                                Description  \
D19_TELKO_DATUM           actuality of the last transaction for the segm...   
KBA05_ANTG1                         number of 1-2 family houses in the cell   
LNR                                                                     NaN   
KBA05_GBZ                              number of buildings in the microcell   
ALTER_HH                                      main age within the household   
D19_TELKO_OFFLINE_DATUM   actuality of the last transaction for the segm...   
D19_BANKEN_OFFLINE_DATUM  actuality of the last transaction for the segm...   
LP_STATUS_GROB                                          social status rough   
DSL_FLAG                                                                NaN   
D19_VERSI_OFFLINE_DATUM   actuality of the last transaction for the segm...   
FINANZ_MINIMALIST                financial typology: low financial interest   
WOHNDAUER_2008                                          length of residenca   
D19_VERSI_ONLINE_DATUM    actuality of the last transaction for the segm...   
D19_TELKO_ONLINE_DATUM    actuality of the last transaction for the segm...   
ONLINE_AFFINITAET                                           online affinity   
LP_LEBENSPHASE_FEIN                                          lifestage fine   
LP_STATUS_FEIN                                          social status fine    
LP_LEBENSPHASE_GROB                                         lifestage rough   
LP_FAMILIE_FEIN                                            family type fine   
LP_FAMILIE_GROB                                           family type rough   

                           Information level  
D19_TELKO_DATUM                    Household  
KBA05_ANTG1               Microcell (RR4_ID)  
LNR                                      NaN  
KBA05_GBZ                 Microcell (RR3_ID)  
ALTER_HH                           Household  
D19_TELKO_OFFLINE_DATUM            Household  
D19_BANKEN_OFFLINE_DATUM           Household  
LP_STATUS_GROB                        Person  
DSL_FLAG                                 NaN  
D19_VERSI_OFFLINE_DATUM            Household  
FINANZ_MINIMALIST                     Person  
WOHNDAUER_2008                     Household  
D19_VERSI_ONLINE_DATUM             Household  
D19_TELKO_ONLINE_DATUM             Household  
ONLINE_AFFINITAET                     RR1_ID  
LP_LEBENSPHASE_FEIN                   Person  
LP_STATUS_FEIN                        Person  
LP_LEBENSPHASE_GROB                   Person  
LP_FAMILIE_FEIN                       Person  
LP_FAMILIE_GROB                       Person

Кластер 5

Values  \
KBA05_GBZ                 0.947666   
D19_BANKEN_ONLINE_DATUM   0.963115   
RT_SCHNAEPPCHEN           0.963800   
KBA05_ANTG1               0.970912   
D19_TELKO_OFFLINE_DATUM   0.974054   
D19_BANKEN_OFFLINE_DATUM  0.977057   
D19_VERSI_OFFLINE_DATUM   0.987146   
SEMIO_VERT                0.991396   
D19_TELKO_ONLINE_DATUM    0.997941   
D19_VERSI_ONLINE_DATUM    0.998505   
DSL_FLAG                  0.998840   
WOHNDAUER_2008            1.016094   
CJT_TYP_4                 1.035105   
LP_STATUS_GROB            1.036272   
CJT_TYP_6                 1.043066   
CJT_TYP_3                 1.043640   
CJT_TYP_5                 1.043770   
FINANZ_VORSORGER          1.052111   
LP_STATUS_FEIN            1.083459   
FINANZ_MINIMALIST         1.113985   

                                                                Description  \
KBA05_GBZ                              number of buildings in the microcell   
D19_BANKEN_ONLINE_DATUM   actuality of the last transaction for the segm...   
RT_SCHNAEPPCHEN                                                         NaN   
KBA05_ANTG1                         number of 1-2 family houses in the cell   
D19_TELKO_OFFLINE_DATUM   actuality of the last transaction for the segm...   
D19_BANKEN_OFFLINE_DATUM  actuality of the last transaction for the segm...   
D19_VERSI_OFFLINE_DATUM   actuality of the last transaction for the segm...   
SEMIO_VERT                affinity indicating in what way the person is ...   
D19_TELKO_ONLINE_DATUM    actuality of the last transaction for the segm...   
D19_VERSI_ONLINE_DATUM    actuality of the last transaction for the segm...   
DSL_FLAG                                                                NaN   
WOHNDAUER_2008                                          length of residenca   
CJT_TYP_4                                                               NaN   
LP_STATUS_GROB                                          social status rough   
CJT_TYP_6                                                               NaN   
CJT_TYP_3                                                               NaN   
CJT_TYP_5                                                               NaN   
FINANZ_VORSORGER                            financial typology: be prepared   
LP_STATUS_FEIN                                          social status fine    
FINANZ_MINIMALIST                financial typology: low financial interest   

                           Information level  
KBA05_GBZ                 Microcell (RR3_ID)  
D19_BANKEN_ONLINE_DATUM            Household  
RT_SCHNAEPPCHEN                          NaN  
KBA05_ANTG1               Microcell (RR4_ID)  
D19_TELKO_OFFLINE_DATUM            Household  
D19_BANKEN_OFFLINE_DATUM           Household  
D19_VERSI_OFFLINE_DATUM            Household  
SEMIO_VERT                            Person  
D19_TELKO_ONLINE_DATUM             Household  
D19_VERSI_ONLINE_DATUM             Household  
DSL_FLAG                                 NaN  
WOHNDAUER_2008                     Household  
CJT_TYP_4                                NaN  
LP_STATUS_GROB                        Person  
CJT_TYP_6                                NaN  
CJT_TYP_3                                NaN  
CJT_TYP_5                                NaN  
FINANZ_VORSORGER                      Person  
LP_STATUS_FEIN                        Person  
FINANZ_MINIMALIST                     Person

Кластер 6

Values  \
D19_VERSI_DATUM           0.966979   
WOHNDAUER_2008            0.984326   
DSL_FLAG                  0.985002   
D19_BANKEN_DATUM          0.988743   
D19_TELKO_DATUM           0.989619   
D19_BANKEN_ONLINE_DATUM   0.993870   
CJT_TYP_4                 0.994601   
CJT_TYP_5                 0.994726   
CJT_TYP_3                 0.996422   
D19_TELKO_OFFLINE_DATUM   0.997447   
D19_VERSI_OFFLINE_DATUM   0.999335   
D19_TELKO_ONLINE_DATUM    0.999689   
D19_VERSI_ONLINE_DATUM    0.999875   
D19_BANKEN_OFFLINE_DATUM  0.999881   
FINANZ_VORSORGER          1.007278   
CJT_TYP_6                 1.008928   
D19_VERSAND_DATUM         1.022207   
CJT_KATALOGNUTZER         1.037212   
D19_GESAMT_ONLINE_DATUM   1.051045   
D19_VERSAND_ONLINE_DATUM  1.081430   

                                                                Description  \
D19_VERSI_DATUM           actuality of the last transaction for the segm...   
WOHNDAUER_2008                                          length of residenca   
DSL_FLAG                                                                NaN   
D19_BANKEN_DATUM          actuality of the last transaction for the segm...   
D19_TELKO_DATUM           actuality of the last transaction for the segm...   
D19_BANKEN_ONLINE_DATUM   actuality of the last transaction for the segm...   
CJT_TYP_4                                                               NaN   
CJT_TYP_5                                                               NaN   
CJT_TYP_3                                                               NaN   
D19_TELKO_OFFLINE_DATUM   actuality of the last transaction for the segm...   
D19_VERSI_OFFLINE_DATUM   actuality of the last transaction for the segm...   
D19_TELKO_ONLINE_DATUM    actuality of the last transaction for the segm...   
D19_VERSI_ONLINE_DATUM    actuality of the last transaction for the segm...   
D19_BANKEN_OFFLINE_DATUM  actuality of the last transaction for the segm...   
FINANZ_VORSORGER                            financial typology: be prepared   
CJT_TYP_6                                                               NaN   
D19_VERSAND_DATUM         actuality of the last transaction for the segm...   
CJT_KATALOGNUTZER                                                       NaN   
D19_GESAMT_ONLINE_DATUM   actuality of the last transaction with the com...   
D19_VERSAND_ONLINE_DATUM  actuality of the last transaction for the segm...   

                         Information level  
D19_VERSI_DATUM                  Household  
WOHNDAUER_2008                   Household  
DSL_FLAG                               NaN  
D19_BANKEN_DATUM                 Household  
D19_TELKO_DATUM                  Household  
D19_BANKEN_ONLINE_DATUM          Household  
CJT_TYP_4                              NaN  
CJT_TYP_5                              NaN  
CJT_TYP_3                              NaN  
D19_TELKO_OFFLINE_DATUM          Household  
D19_VERSI_OFFLINE_DATUM          Household  
D19_TELKO_ONLINE_DATUM           Household  
D19_VERSI_ONLINE_DATUM           Household  
D19_BANKEN_OFFLINE_DATUM         Household  
FINANZ_VORSORGER                    Person  
CJT_TYP_6                              NaN  
D19_VERSAND_DATUM                Household  
CJT_KATALOGNUTZER                      NaN  
D19_GESAMT_ONLINE_DATUM          Household  
D19_VERSAND_ONLINE_DATUM         Household

Для остальных кластеров и анализа, пожалуйста, проверьте код GitHub.

Таким образом, с помощью функции combine_info() мы можем обратить PCA и k-средних и определить столбцы, которые вносят наибольший вклад в формирование кластера, мы можем изучить это дальше, чтобы определить потенциальных клиентов. .

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

Часть 2. Обучение с учителем для прогнозирования потенциальных клиентов

Для этого мы сначала обработаем данные mailout_train, затем применим модель логистической регрессии и предскажем вероятность того, что кандидат станет потенциальным клиентом.

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

Исследуя набор данных поезда mail_out, мы обнаружили, что распределение «RESPONSE» сильно несбалансировано.

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

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

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

Я буду работать над моделью логистической регрессии, так как это бинарная классификация.

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

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

Построение матрицы путаницы

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

Заключение

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

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

Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter и LinkedIn. Присоединяйтесь к нашему сообществу Discord.