Решается прикладная задача по определению некоторой характеристики реальной системы. Система снабжает нас данными, которые после программной обработки дают "ответ". Данные поступают порциями, и по каждой порции мы определяем "ответ". Теоретически ответы должны быть одинаковыми, так как характеристика не меняется со временем, но реально они плавают, так как есть случайные ошибки (погрешности, шумы, и много других факторов). Влияние случайностей удалось снизить, поэтому сейчас плавание не сильное. В такой ситуации логично за окончательный ответ принять среднее арифметическое (мат. ожидание выборки). Систематического "уплывания" сейчас не наблюдается (по крайней мере обнаружить не удалось), поэтому теоретически среднее арифметическое при неограниченном количестве порций должно дать верный ответ.
Всё бы ничего, да только в некоторых ситуациях ответ резко портится, и хотя в дальнейшем он со временем восстанавливается, очень не хочется увеличивать объём выборки в 3-4 раза для восстановления.
Ближе к практике.
Типичный объём выборки 10. Размер в 20 уже нежелателен, в 30 очень нежелателен, 50 и выше уже скорее всего неприемлем. Причина этого в долгом ожидании данных. Поэтому нужно постараться извлечь максимум данных из малого объёма выборки. Это вполне реально, так как выборка чаще всего имеет слабый разброс, пример:
Видно, что значение плавает несильно, поэтому среднее арифметическое даст адекватный ответ с точностью около 0.1-0.01, это хороший результат. Однако периодически случаются выбросы, например:
Третье значение (24.8) - выброс. Они резко портят среднее, и далее приходится набирать ещё около 20 значений, чтобы задавить выброс. Хочется такое явление побороть.
Как можно это пытаться сделать. Есть несколько методов, все имеют свои недостатки, хочется услышать мнение людей, которые лучше меня разбираются в вопросе, как лучше сделать.
Способ 1.Брать не среднее, а медиану выборки.
Плюсы.Выбросы нам не страшны.
Минусы.Медиана может иметь странные скачки при наращивании размера выборки, кроме того для малой выборки адекватность оценки медианой вызывает сомнения.
Способ 2.Упорядочить выборку по возрастанию, исключить из неё максимум и минимум, усредниться по оставшейся части.
Плюсы.Исключим один или два выброса, так как выборка малая, то маловероятно, что выбросов будет больше.
Минусы.Если выбросов будет больше двух, или будет два, но оба, скажем, максимумы, то мы особо ничего не улучшим. Кроме того, если выброс один, скажем, максимум, то мы выкинем выброс, и минимум, причём минимум будет выброшен "полезный", что сместит оценку среднего вверх.
Способ 3.Аналогичен первому, упорядочиваем выборку, исключаем 10% максимальных и 10% минимальных значений (процент можно брать другой, или вообще подбирать его адаптивно).
Плюсы.Выбросы страшны лишь при слишком большом их количестве, но если выбросов 20% и выше, это будет свидетельствовать о том, что выбрана плохая модель, так что это вполне приемлемо.
Минусы.Для сохранения значимости оценки выборку нужно увеличить на 25%, скажем, если мы раньше набирали выборку на 10 элементов, то после выкидывания краёв останется лишь 8, что снижает объём эффективной выборки, по которой берётся среднее. Это не очень хорошо.
Дальше идут способы, пытающиеся обнаруживать выбросы.Способ 4.Считаем среднее
, считаем СКО
, всё, что вывалилось за пределы интервала
считаем выбросами, в ответ пойдёт усреднение по выборке, из которой исключены выбросы.
Плюсы.Слишком сильные выбросы будут отброшены.
Минусы.Если выбросов нет, есть реальный шанс отправить половину выборки в лес.
Способ 5.Наверное, самый правильный метод обнаружения выбросов. Провести кластеризацию данных. Этот метод я понимаю хуже всего, но он кажется самым интересным. Как я пока представляю себе процесс кластеризации. Взять некоторое
, затем пройтись по выборке окном ширины
, посчитать функцию, определённую как количество элементов выборки, попадающих в диапазон
:
Затем у функции
ищутся все локальные максимумы, их считаем центрами кластеров, каждый элемент выборки относим к ближайшему из найденных центров.
Как выбирать ширину окна - не знаю, может быть её стоит подбирать по конкретной выборке каким-то алгоритмом, может вообще сделать её переменной.
Плюсы.Плюсы огромны. Мы легко чувствуем выбросы (очень маленькие кластеры), мы видим даже такую гадостную ситуацию, когда выборку реально является смесью нескольких выборок случайных величин с разным мат. ожиданием, и сможем вовремя просигнализировать о некачественной выборке. В общем плюсов вагон.
Минусы.Очевидных минусов не могу придумать, но при условии, что этот метод удастся реализовать в том виде, в каком заявлено
. Вопрос о выборе ширины окна довольно сложен. Хуже того, я совершенно не понимаю, позволит ли описанная процедура кластеризации действительно получить что-то осмысленное, на данный момент этот метод представляется как просто некоторый эмпирический подход, без какого-либо строгого обоснования, поэтому степень доверия к нему не очень высока.
Очень надеюсь на совет от специалистов.