Evgeny Kobzev в FB рассказывает
Мы тут решали задачу прогнозирования сроков создания платёжек для клиентов. У нас были данные за несколько месяцев, напустили на них ML, получили точность под 60% в первом подходе. Потом я вспомнил, что в универе нам на тервере говорили, что распределение Пуассона это число людей в очереди, взяли формулы оттуда, выкинули ML, сходу получили точность под 90%.
Забавно, что максимально тупой классификатор типа «если поставлено в первой половине дня, то будет сделано через 3 часа, а если во второй, то завтра» (немного утрирую), давал такую же точность 😂 Мы там, конечно, людей поднавалили, чтобы платёжки делались побыстрее, но в целом это учит тому, что многие вещи решаются просто.
Помню я только закончил универ и делал проект, где нужно было отрисовать диаграмму Ганта в вебе, это год 2001 был, из доступных средств рисования – можно было картинку размером в пиксель бахнуть. Ну я сразу конечно понял, что точками можно любую линию нарисовать, для этого есть специальный алгоритм – алгоритм Брезенхема и реализовал его. На больших диаграммах это тормозило. Мой коллега, выпускник технического вуза, с мозгом не замутнённым алгоритмами, заметил, что все линии, которые надо рисовать, строго горизонтальные или вертикальные. И можно этого добиться бахнув прямоугольный пустой блок, у которого 2 нужные границы включены. Всё сразу залетало, моего Брезенхема оставили для рисования заострённого конца у стрелочки 😂
Потом мы начали проверять, что диаграмма не содержит циклов. Хранилось всё в базе данных и мы средствами базы реализовали поиск циклов, просто поиск в глубину через рекурсию, который вызывался при каждом изменении базы в триггере. Однажды клиент сделал в диаграмме более 32 связей и ms sql написал ему: я не буду поддерживать рекурсию глубиной вложенности больше 32. Я тогда придумал как переписать это через поиск в ширину на sql, хранить во временной таблице волновой фронт и строить в другой временной таблице следующий фронт. Очень этим гордился))) А потом коллега из технического вуза опять заметил, что если предыдущий шаг в диаграмме Ганта всегда заканчивается раньше, чем начинается следующий, то циклов возникнуть не может. И нужно просто всё выкинуть и делать вот такую простую и понятную проверку дат шагов. Мы, люди, склонны усложнять, а «многознание уму не научает» 😂
Недавно меня спрашивали какой из продвинутых алгоритмов, которые я в универе изучал, пригодился мне в реальной работе. Так вот – я Брезенхемом птичку в конце стрелочки рисовал!))
S: Эмпирические решения частенько лучше обобщенных, математических
По крайней мере мне не раз приходилось выкидывать что напридумали “добиваясь гладкости функции”, и заменять на тупые алгоритмы с переборами и коэфициентами.
Потому что – борются за гладкость долго, бизнесу результат все равно не нравится.
Единственное из математики что выручало много раз это – логарифмы. Очень классно поджимают, подстраховывают “от переполнения”.