30-дневный писательский челлендж

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

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

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

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

Мы хотим отнести каждого клиента к одной из трех групп. Наши Дойные Коровы (люди, которые много тратят, но не потребляют много ресурсов), наши Собаки (люди, которые тратят мало, но потребляют много ресурсов) и те, кто находится между ними. Мы могли бы предложить скидку клиентам, которые платят больше всего, но используют меньше всего минут. Мы могли бы предложить другой план для клиентов, которые платят меньше всего, но используют больше всего минут.

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

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

Алгоритм работает итеративно.

  1. Создать k случайных точек в качестве средних точек каждой группы
  2. Назначьте каждую точку группе с ближайшей средней точкой
  3. Переместите средние точки в центр их групп

Повторяйте шаги 2 и 3 до тех пор, пока средние точки не перестанут двигаться.

Запустив этот процесс для наших примеров кластеров данных, нашим клиентам нравится это:

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

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

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

Это сообщение из моего 30-дневного писательского конкурса. Я инженер-программист, пытаюсь понять машинное обучение. У меня нет докторской степени, поэтому я объясню простым языком и приведу много примеров.

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