Сравнение распределений на нескольких измерениях в Python - PullRequest
0 голосов
/ 11 января 2019

Я работаю аналитиком в компании, которая находится в процессе перехода к более облачным инструментам. Это означает, что мы перешли от использования SAS / TD SQL (от моих реальных дней аналитики) к работе с Python, Snowflake и т. Д. К сожалению, это также означает, что некоторые старые проприетарные инструменты были удалены, включая те, которые я хотел бы, чтобы у нас все еще были. Однако, к счастью, мы в мире программного обеспечения с открытым исходным кодом, так что надеемся, что это поможет:)

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

  • Автоматическое объединение категориальных / дискретных (не помню, различало ли это два) и непрерывных переменных вместе
  • Ранжирование переменных порядка в каждом сегменте по соответствующей статистике (хи-квадрат или KS) от большинства к наименьшему «разному» в соответствии с этими тестами
  • Создание соответствующих графиков для каждой переменной (например, гистограмма для категориальных переменных, показывающая различия между выборками, кумулятивная функция распределения для непрерывных переменных для предоставления контекста статистике KS)
  • Мин. / Макс. / Среднее / медиана статистики для каждой переменной, включенной в графики

Его выводом был отчет в формате HTML, содержащий домашнюю страницу с переменными и ранжированными переменными из выборок в их собственных таблицах с ключевой статистикой (KS, пропущенные данные, общее количество и т. Д.). При нажатии на отдельную переменную откроется новая HTML-страница с диаграммой распределения + некоторые дополнительные характеристики этой переменной (среднее / медиана / режим / диапазон / макс / мин в каждом образце). Я полагаю, что входные данные допускали понижающую дискретизацию и стратификацию по крайней мере в одном измерении, если желательна нормализация по переменной в контрольном образце.

Все вышеперечисленное кажется вполне выполнимым для повторения и было чрезвычайно полезно для меня. У меня есть несколько вопросов здесь:

1.) Кто-нибудь знает о таких пакетах, которые существуют сегодня в python? Этот инструмент был фактически более хорошим сравнением процесса; функция в SAS.

2.) Если нет, я бы с удовольствием посоветовал основные пакеты / библиотеки, необходимые для сборки этого самостоятельно. В любом случае я пытался стереть с себя мой Python, и это был бы хороший способ сделать это. Я выкопал функцию для вычисления KS в SciPy, я предполагаю, что я использовал бы MatPlotLib для CDF и гистограмм. Было бы целесообразно поддерживать вывод HTML? Какие пакеты было бы полезно сделать что-то подобное? Советы по поводу множества неприятностей, которые могут возникнуть в этом проекте, например, обработка нескольких пропущенных полей в одном образце?

3.) В более общем смысле, это нормальная вещь, которую нужно хотеть? Есть ли лучшие способы решения этой проблемы? Я понимаю, что есть и другие доступные методы (остаточный анализ, чтобы понять, где наши модели не видят изменений производительности; кластеризация для выявления многовариантных узлов, в которых популяции меняются с течением времени; сопоставление алгоритмов для определения идентичных и не похожих популяций; и т. Д. .) чтобы ответить на эти "что отличается?" вводите вопросы более элегантно, но в прошлом этот инструмент оказался очень легким и эффективным, что дало хорошую отправную точку. Буду ли я лучше использовать один из этих других методов и / или просто построить регрессионную модель и ранжировать значение переменной порядка упорядочения, при этом целью будет выборка, из которой поступил счет? Я полагаю, что для коллинеарности требуется больше бремени в том случае, когда я ищу что-то простое, чтобы бросить кухонную раковину для начала.

Предложения в любой из вышеперечисленных строк были бы замечательными! (x-post из stackoverflow)

...