Всем привет. Нужна помощь математиков и вообще всех, кто силен в вычислениях. Убедительная просьба не спрашивать глобально что и зачем, для чего все это, очень прошу смотреть на суть. В общем предположим есть парсер объявлений по доскам в определенной категории, пусть это будут смартфоны. Парсер пробегает по всем доскам и собирает со всех объявлений о продаже смартфонов цену. В результате получается некий пул цен, из которых затем нужно получить среднее значение - то есть узнать среднюю цену по смартфону на всех досках. НО. Все бы ничего, если бы некоторые объявлени не содержали "ошибочных" цен: к примеру некоторые объявления содержат цену в 1 рубль, а какие-то - миллион рублей за товар. Как следствия, такие значения не позволят вычислить объективную стоимость модели телефона по рынку. Собственно вопрос - каким образом можно исключить эти ошибочные значения и высчитать объективную среднюю стоимость продукта из всех оставшихся значений? Спасибо
я тут проспал вопрос.
если у тебя нет других факторов кроме цены - выбираешь % confidence у цены, типа, 95% или 99%, выкидываешь нахрен все в верхнем и нижнем квантиле.
т.е. для 99% confidence - выкидываешь нижние 0.5% и верхние 0.5%
если у тебя кучка других факторов - ну там, цена новой модели, год, флаг "распознан - не распознан", чем больше тем лучше. главное - не перепутать случайно категориальные и регрессионные фичи. регрессионные - это, например, количество таких моделей в продаже на вторичке. 2000 моделей больше 1500 так же, как 1500 больше 1000. регрессионка - это когда у тебя отношение (в примере выше - +500) может быть перенесено на другое значение и все еще отражать реальное отношение. категориальные - это версия андроида, тащемта, например. андроид 4 не относится к андроиду 3 так же, как андроид 6 к андроиду 5, та же самая история с айфоном 7 и 6, нпрмр. такие штуки надо превращать в isAndroid6, isAndroid7.
описание точно так же можно превратить в фичи, простейшая модель - bag-of-words, тупо количество вхождений любого слова (без морфем) превращаешь в такой же параметр. и у тебя "разбит(ый)" и "сломанн(ый)" превращаются в факторы, которые ты можешь учитывать. В идеале, конечно, делать word2vec или хотя бы пошаманить с n-граммами, но и так покатит.
цены и прочие штуки лучше превратить - log(x), например, сделать, тогда у тебя мобильник за 1000 будет относиться к мобильнику за 2000 так же, как мобильник за 10000 к мобильнику за 20000, а не за 11000.
дальше ты это все (но не цену) пихаешь в линейную регрессию в попытке предсказать ожидаемую цену. за счет того что у тебя регрессия - ты получаешь усредненное предсказание цены сего девайса, и дальше уже можно смотреть, аномалия это или нет.
в идеале, конечно, ручками задать флаг каждому - отклонение или нет, натренировать ручками модель, а дальше оно само найдет, но тебе не факт что это надо, но если надо, заводи xgboost и ставь его считаться деревьев в 300. там, кстати, люди хотят его под asm.js портануть, я смотрел, задача, не очень сложная, можно попробовать, если хочешь.