Задача с Kaggle: Predicting Red Hat Business Value

В этой заметке задокументирую основные шаги решения конкурсной задачи от Red Hat. Конкурс проходил на площадке Kaggle.

Времени лично у меня было очень мало – около 7-10 дней. Поэтому финальный результат – ТОП 12%, хотя до последнего дня держался в ТОП 9%. В принципе это неплохо (учитывая, что это мое второе подобное соревнование), но можно было лучше.

Вот здесь можно скачать упрощенный вариант моего решения. Эта версия кода дает результат порядка 99% AUC (это далеко не лучшее мое решение, но зато очень наглядное и простое; в финальном варианте я использовал микс из более сложных моделей)

Исходные данные

Компания Red Hat предоставила для соревнования информацию о своих клиентах. Данные, как и во многих задачах, обезличены. В одной таблице хранится какая-то персональная информация о людях. В другой информация об их активности (возможно, это какие-то покупки, предзаказы, обращения в службу поддержки или что-то типа этого).

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

Используемая метрика: AUC. (more…)

Read More

Линейная регрессия. Простая реализация на Python.

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

Цитата из Wiki: Линейная регрессия (англ. Linear regression) — используемая в статистике регрессионная модель зависимости одной (объясняемой, зависимой) переменной от другой или нескольких других переменных (факторов, регрессоров, независимых переменных) с линейной функцией зависимости.

Итак. Буду делать упрощенный аналог LinearRegression() из sklearn.

Финальный вариант кода можно скачать или посмотреть на github. (more…)

Read More

Квантили, квартили, децили, процентили: что это такое?

Если заглянуть в Википедию, то можно найти такое определение: “Квантиль – значение, которое заданная случайная величина не превышает с фиксированной вероятностью”.

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

В предыдущей заметке я упоминал такую статистику как медиана. Она делит распределение пополам. То есть с ее помощью мы можем показать, какое значение находится в середине упорядоченного набора данных. А что, если нам интересно посмотреть на значение, которое находится не в середине, а, например, на границе первой четверти? Или третьей четверти? Или вообще в произвольной точке? (more…)

Read More

Преобразование элементов списка из типа str в int

Недавно потребовалось проделать такую операцию:

  • преобразовать список символов [‘1’, ‘2’, ‘3’, ‘4’, ‘5’] в список чисел [1, 2, 3, 4, 5]

Делается это так:

s = ['1', '2', '3', '4', '5']
s = map(int, s)

Аналогично можно сделать преобразование с другими типами.

opisatelnie-statistiki

Описательные статистики

Начинаю цикл заметок на тему статистики.

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

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

Постараюсь формулировать все тезисы максимально простым и живым языком.

Итак. Поехали! (more…)

Read More