Какие навыки необходимы для проведения крупномасштабного статистического анализа?

107

Многие статистические работы требуют опыта работы с крупномасштабными данными. Какие виды статистических и вычислительных навыков понадобятся для работы с большими наборами данных. Например, как насчет построения регрессионных моделей с учетом набора данных с 10 миллионами выборок?

бит вопрос
источник
1
Несколько хороших указателей здесь .
Радек
Было бы полезно, если бы вы суммировали те из них, которые вы считаете лучшими.
rolando2
Также представляет интерес обсуждение связанных с этим гипотез с большими наборами данных: stats.stackexchange.com/q/2516/919
whuber

Ответы:

115

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

Для фона и контекста- так что вы можете учитывать любые личные предубеждения, которые могут проникнуть в это сообщение - большая часть моей работы была в том, чтобы помогать людям принимать важные решения на основе относительно небольших наборов данных. Они невелики, потому что сбор данных может быть дорогим (например, 10 тысяч долларов за первый образец скважины для мониторинга подземных вод или несколько тысяч долларов за анализ необычных химических веществ). Я привык получать как можно больше из любых доступных данных, исследовать их до смерти и изобретать новые методы для их анализа в случае необходимости. Однако в последние несколько лет я работал над некоторыми довольно большими базами данных, такими как социально-экономические и инженерные данные, охватывающие весь США на уровне блоков переписи (8,5 млн. Записей,

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

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

    • Из-за этого вы будете тратить больше времени на документирование того, что вы делаете, и написание сценариев всего (чтобы это можно было повторить).

    • Как только что заметил @dsimcha, хорошие навыки программирования полезны. На самом деле, вам не нужно много опыта в средах программирования, но вам нужна готовность программировать, способность распознавать, когда программирование поможет (практически на каждом этапе, действительно) и хорошее понимание основных элементов компьютерные науки, такие как проектирование соответствующих структур данных и анализ вычислительной сложности алгоритмов. Это полезно для того, чтобы заранее знать, будет ли код, который вы планируете писать, масштабироваться до полного набора данных.

    • Некоторые наборы данных являются большими, потому что они имеют много переменных (тысячи или десятки тысяч, все они разные). Будьте готовы потратить много времени, просто подытоживая и понимая данные . Кодовая книга или словарь данных , а также другие формы метаданных , становятся существенными.

  • Большая часть вашего времени тратится на перемещение данных и их переформатирование. Вам нужны навыки обработки больших баз данных и навыки суммирования и отображения больших объемов данных. ( Малый кратный Туфте выходит на первый план здесь.)

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

  • Практически любой выполняемый вами статистический тест будет настолько мощным, что почти наверняка будет выявлен «значительный» эффект. Вы должны сосредоточиться на статистической важности , такой как размер эффекта, а не на значимости.

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

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

  • У вас будет достаточно данных для обнаружения нелинейных связей, изменений в тенденциях, нестационарности, гетероскедастичности и т. Д.

  • Вы никогда не закончите . Существует так много данных, что вы можете изучать их вечно. Поэтому важно с самого начала установить свои аналитические цели и постоянно помнить о них.

Я закончу коротким анекдотом, который иллюстрирует одну неожиданную разницу между регрессионным моделированием с большим набором данных по сравнению с меньшим. В конце этого проекта с данными переписи разработанная мной модель регрессии должна была быть реализована в вычислительной системе клиента, что означало написание кода SQL в реляционной базе данных. Это обычный шаг, но код, сгенерированный программистами баз данных, включал тысячи строк SQL. Это сделало почти невозможным гарантировать отсутствие ошибок - хотя мы могли обнаруживать ошибки (это дало разные результаты на тестовых данных), их обнаружение было другим вопросом. (Все, что вам нужно, это одна типографская ошибка в коэффициенте ...) Частью решения было написание программы, которая генерировала команды SQL непосредственно из оценок модели, Это гарантировало, что то, что вышло из пакета статистики, было именно тем, что вошло в RDBMS. В качестве бонуса, несколько часов, потраченных на написание этого скрипта, заменили, возможно, несколько недель на кодирование и тестирование SQL. Это небольшая часть того, что значит для статистика иметь возможность сообщать свои результаты.

Whuber
источник
3
+1, я поделюсь этим замечательным ответом (и распечатаю, чтобы иметь рядом ^ _ ^)
Дмитрий Челов
1
+1, это то, что я, безусловно, перескажу моим ученикам на долгие годы.
mpiktas
2
анекдот напомнил мне время, когда я должен был перенести модель из Eviews в R. Первоначальная модель была сделана в Eviews, результат составил около 20 уравнений. Я должен был представить результаты на веб-странице с интерактивным интерфейсом. Поскольку модель находилась в стадии разработки, я написал код, переводящий вывод Eviews в код R с той же целью, чтобы точная модель использовалась как в Eviews, так и в R. R работал очень хорошо, я даже использовал различие переведенного кода. для расчета аналитического градиента.
mpiktas
2
Обычно это считается более конструктивным (если не простой вежливостью), когда в комментарии оправдываются отрицательные отзывы, если только нет явных причин не делать этого (например, неопределенный ответ в одну строку, отсутствие ответа на запрос об обновлении неправильного ответа, Оскорбительное поведение). Это способствует повышению качества ответа, когда приводятся правильные аргументы. В данном конкретном случае я не вижу причин для снижения рейтинга!
ЧЛ
2
+1 для автоматизации уменьшает ошибку: « напишите программу, которая генерировала команды SQL непосредственно из оценок модели ».
Орион
18

Ваш вопрос должен дать несколько хороших ответов. Вот некоторые отправные точки.

  1. Способность работать с компромиссами между точностью и требованиями, предъявляемыми к вычислительной мощности.

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

  3. Глубокое понимание взаимосвязи между статистической значимостью и практической значимостью. Широкий репертуар методов выбора переменных.

  4. Инстинкт перепутать.

rolando2
источник
Я также хотел бы объединить # 4 и # 1: важно знать, как проводить перекрестную проверку, не перегружая ваши вычислительные ресурсы.
Зак
1
Не могли бы вы объяснить свой второй пункт? Как бы вы использовали CHAID / CART / нейронные сети в качестве инструментов скрининга для регрессии?
raegtin
2
@raegtin - я больше всего знаком с CHAID, который предлагает так называемые «взаимодействия», которые часто являются основными эффектами, маскирующимися под взаимодействия, потому что это единственный способ, которым процедура «пропустит их». (В CHAID может быть только один основной эффект, идентифицированный как таковой, поэтому все остальные основные эффекты помещаются в ячейки «взаимодействия».) Но CHAID имеет то преимущество, что может проверять множество взаимодействий. Таким образом, как только несколько многообещающих идентифицированы, они могут быть включены в регрессию или анову со всеми их компонентами более низкого порядка, и можно проверить, какие из них действительно полезны.
rolando2
1
+1 Я заинтригован возможностью использования интеллектуального анализа данных (особенно CHAID) для изучения потенциальных эффектов. Было бы интересно увидеть приложение, например, с искусственным (и небольшим) набором данных на stats.stackexchange.com/q/10363/919
whuber
12

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

dsimcha
источник
4
Кодирование обязательно, но важно знать, как работать с ОС, а не против нее. Вы должны понимать, что иногда разделение работы сопряжено с дополнительными затратами, поскольку доступ к дискам и сетям влечет за собой дополнительные расходы. Вы должны понимать различные способы блокирования, ожидания и выполнения межпроцессного взаимодействия. Я видел отличный научный код, который потратил бы большую часть времени в ожидании завершения некоторых системных вызовов. Подружитесь с системным администратором своей системы, вы можете получить большую помощь в оптимизации своих систем, принеся им кофе;)
Marcin
2
Иногда лучше написать «Неэффективный код», если это поможет в создании структур данных, которые ожидают дополнительные вопросы в будущем, которые, вероятно, будут заданы.
Ральф Уинтерс
1
@Ralph: +1, я абсолютно согласен и сам научился этому нелегко. Я не хотел применять, что вы всегда должны писать эффективный код независимо от компромиссов, просто вы должны знать, как это сделать.
дсимча
5

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

Ральф Винтерс

Ральф Винтерс
источник
3
Это хорошие моменты. Выбросы и другие проблемы с данными мешают любому набору данных, независимо от его размера. По моему опыту, их на самом деле легче идентифицировать и обрабатывать в больших наборах данных, поскольку у вас есть возможность отличать их от массы данных, и, особенно если вы используете надежные методы, они с меньшей вероятностью влияют на результаты. Кстати, вы всегда делаете «очистку данных» на протяжении любого анализа. Это не то, что можно отделить и передать специалисту, с которым нужно разобраться раз и навсегда. Выброс - это всего лишь выброс в контексте конкретной модели.
whuber
2
Посмотрите на Google уточнение как полуавтоматический очиститель данных, который помогает избежать ошибок ручного редактирования.
mindless.panda
5
  1. Обрамление проблемы в структуре Map-Reduce .
  2. Инженерная сторона проблемы, например., Сколько делает это больно использовать более низкую точность для параметров, или выбор моделей основано не только на обобщении , но хранения и затраты вычислений , а также.
высокая пропускная способность
источник
Не могли бы вы предоставить соответствующую ссылку на каркас Map-Reduce, который вы упомянули?
mindless.panda
@ sugar.panda, добавлена ​​ссылка на вики!
highBandWidth
+1 за упоминание о более низкой точности, хотя это далеко не увлекательная прерогатива. Чем ниже точность, тем больше вероятность того, что мы примем неверные решения. Это тесно связано с ошибкой типа I / II и охватывает несколько дисциплин, но в основном относится к статистике, науке принятия решений и экономике. Должны быть заранее продуманы функции полезности и часть мыслительного процесса, чтобы определить подходящую методологию.
Томас Шпейдель