Статистическое удаление ошибочных значений - PullRequest
2 голосов
/ 18 сентября 2008

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

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

РЕДАКТИРОВАТЬ: Чтобы добавить немного мяса в кости. Скажем, цены являются ценами на акции (они не являются, но ведут себя одинаково). Вы могли видеть, что цены значительно повышаются или понижаются в течение дня. В среднем за день мы записываем около 150 цен, а иногда одна или две ошибаются. В остальное время все они хороши ...

Ответы [ 6 ]

1 голос
/ 18 сентября 2008

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

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

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

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

С учетом сказанного возможны следующие альтернативы.

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

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

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

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

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

1 голос
/ 18 сентября 2008

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

0 голосов
/ 18 сентября 2008

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

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

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

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

0 голосов
/ 18 сентября 2008

Цитата из здесь :

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

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

0 голосов
/ 18 сентября 2008

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

0 голосов
/ 18 сентября 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...