2008-09-18 2 views
2

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

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

EDIT: Чтобы добавить немного мяса в кость. Скажем, цены - это цены акций (они не, но они ведут себя одинаково). Вы могли видеть, что цены двигаются значительно вверх или вниз в течение дня. В среднем день мы записываем около 150 цен, а иногда один или два - это неправильно. Другие времена они все хорошо ...

ответ

1

Рассчитать и отслеживать standard deviation. После того, как у вас будет достойное отставание, вы можете игнорировать выбросы, видя, сколько стандартных отклонений они от среднего. Еще лучше, если у вас есть время, вы можете использовать эту информацию, чтобы сделать naive Bayesian classification.

0

Вы можете измерить стандартное отклонение в вашей существующей совокупности и исключить те, которые превышают 1 или 2 стандартных отклонения от среднего?

Это будет зависеть от того, что ваши данные выглядят, чтобы дать более точный ответ ...

0

Или график скользящего среднего цен вместо фактических цен.

0

Цитируя here:

Статистикам разработали несколько методов для обнаружения выбросов. Все методы сначала определяют, насколько далеко от других значений. Это может быть разница между выбросом и средним значением всех точек, разницей между выбросом и средним значением оставшихся значений или разницей между выбросом и ближайшим ближайшим значением. Затем стандартизируйте это значение, разделив его на некоторую меру разброса, например SD всех значений, SD оставшихся значений или диапазон данных. Наконец, вычислите значение P, отвечающее на этот вопрос: если все значения действительно были отобраны из популяции гаусса, какова вероятность случайного получения выброса от других значений? Если значение P невелико, вы заключаете, что отклонение выброса от других значений является статистически значимым.

Google - ваш друг, вы знаете. ;)

1

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

  • сколько усилий вы готовы вложить в это?

  • могут ли некоторые ответы действительно отличаться на +/- 20% или независимо от того, что вы изобретаете? так всегда будет необходимо вмешательство человека?

  • и придумать соответствующий тест, мне нужно будет узнать гораздо больше о предмете.

Это, как говорится, является альтернативой.

  • Простой тест по сравнению с предыдущим значением (или среднее/режим предыдущих 10 или 20 значений) будет прямо вперед, чтобы осуществить

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

См http://en.wikipedia.org/wiki/Normal_distribution и http://en.wikipedia.org/wiki/Gaussian_function имеются соответствующие ссылки с этих страниц, чтобы помочь в программировании этих, а также в зависимости от языка, который вы используете там, вероятно, будут функции и/или плагины доступны, чтобы помочь с этим

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

Я думаю, что второй вариант является правильным для вас. Использование стандартного отклонения (многие языки содержат функцию для этого) может быть более простой альтернативой, это просто мера того, как далеко значение отклонилось от среднего значения x предыдущих значений, я бы поставил вариант стандартного отклонения где-то между вариант 1 и 2

0

для вашего конкретного вопроса о черчения и ваш конкретный сценарий в среднем 1-2 ошибок в день из 150, самого простого, что может быть сюжетом обрезанных средств или диапазон средние 95% значений, или что-то в этом роде. Это действительно зависит от того, какую ценность вы хотите от сюжета.

Если вы действительно заинтересованы в истинном максимальном и истинном ценах дня, тогда вам приходится иметь дело с выбросами как выбросы и правильно исключать их, возможно, используя один из ранее предложенных ранее критериев выбросов (точка данных x % больше, чем следующая точка, или последние n точек, или более 5 стандартных отклонений от среднесуточного значения). Другим подходом является просмотр того, что происходит после выброса. Если это выброс, то у него будет резкий подъем, сопровождаемый резким спадом.

Если вам небезразличен общий тренд, ежедневная резка средней величины, медиана, 5% и 95% процентилей хорошо отражают историю.

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

Смежные вопросы