Pull to refresh

Comments 57

Боюсь, что нет)
Несмотря на то, что фамилия имя и отчество по отдельности не являются персональными данными, я уверен, что начальство будет против такого моего шага, а в обход их это было бы делать очень недальновидно.
Но да, я хотел бы выложить подобную базу если бы появилась возможность ее собрать на основе данных уже находящихся в открытом доступе (и если бы у меня хватало бы технических навыков для этого, что тоже важно).
А я не прошу оригинал базы.
Я прошу 2 таблички формата
ИМЯ, ПОЛ
Фамилия, ПОЛ
Ок, вроде довольно безобидная информация, раскрытие которой никому не повредит. Попытаюсь уточнить, но не могу гарантировать.
Присоединюсь к обмену.
В общую копилку Фамилия — пол, Имя- Пол, Отчество- пол. Выстраданное в том числе и операторами на местах.
Решал похожую задачу. Только тарифы были не на год а на 20-50 лет=) (НПФ)

Оформляли как то это решение?
Получается что система определяет пол если не указан + переопределяет если указан не верно(?) что в конечном итоге влияет на тариф => на финансовые результаты организации. А тем где есть деньги — много бумаг (особенно в больших компаниях «при объеме портфеля договоров в несколько миллиардов» )
Или всё же назначение пола сотрудник утверждает => берет на себя ответственность.

Нет, никаких особенно это не оформляли. Отдел, в котором я работал, занимался актуарными расчетами + аналитикой (как внешней так и внутренней) + автоматизацией. Из-за этого весь процесс разработки и одобрения был предельно коротким:
— я пришел в сб чтобы поиграть с данными, попутно написал первую версию функции и проверил ее качество
— в пн скинул начальнику результаты и спросил можно ли мне проапдейтить исторические данные + установить запрет на занесение новых людей с неправильным полом на уровне триггера. за 15 минут получил одобрение.
— в среду, когда появилось свободное время, сделал задуманное + оповестил тех сотрудников, которые должны были с этой проверкой столкнуться.

Поскольку хренение [застрахованных-физлиц для медицинских договоров] и [всех прочих контрагентов] было в разных таблицах (по историческим причинам), то все прошло довольно безболезненно.

Первая ошибка определения пола пришла примерно через месяц после того, как я установил эту проверку.
Поскольку хренение
«Нет-нет, это не опечатка. Ты посмотри на него — какое ж это мясо? Это мсяо! Вот и дальше правильно написано — говюжье
извиняюсь, но нет, не смогу предоставить (из-за ограничений на целевое использование данных клиентов)
Вконтакт в своём API (users.get) позволяет узнать пол юзера. А все юзеры живут тут: https://vk.com/catalog.php (собственно, id-ы растут последовательно, так что этот список и не нужен). Так что можно надёргать достаточно много данных по именам и полу.
Мне попадался текст, вроде даже на хабре, там для задачи «пол по имени» использовался наивный байесовский классификатор по буквам, не пробовали?
Вероятней всего имеется ввиду эта статья.
Нет, я не пробовал брать буквы, только целые слова.Но думаю, что стоит попробовать этот метод для определения пола тех людей, для которых не удалось определить пол моей текущей функцией. Сейчас для этих целей я использую окончания отчеств, но я допускаю что из первой и второй буквы (в т.ч. других частей ФИО) можно извлечь какую-то доп информацию. И да, вероятно этот метод будет более устойчив к опечаткам, чем описанный в статье.
Возьмите тогда более сложный классификатор, а не наивный байесовский (который вы полностью повторили в своём решении, с единственным изменением — вы округляете результаты по каждому признаку вместо использования вероятностей).
Дело в том, что наивный байес склонен переоценивать повторяющиеся признаки (и недооценивать важные, но редко повторяющиеся) — он учтёт их столько раз, сколько раз они встретятся. Например, последние две буквы окончания и последняя буква окончания — это повторяющиеся признаки. За каждое будет "+1".
>последние две буквы окончания и последняя буква окончания
последние две буквы отчества и последняя буква отчества

(заработался)
Одна из районно-школьных олимпиадных задачек по информатике. Но условия чуть другие были.

Me пустил скупую мужскую слезу.
Я вот не могу с ходу придумать (в столь раннее утро) какие женские отчества не оканчиваются на «а» (в кириллице). Подскажите?
Гадя Петрович Хренова ))
оглы\кызы, но это довольно стандартный случай, его можно учесть алгоритмически.
Чуть выше я упомянул, что под названием «отчество» я имел ввиду все что после второго пробела. Довольно часто встречаются варианты вроде «Ангела Доротея Меркель», где искомого окончания в женских ФИО в конце третьей части найти не удастся.
Именно из-за иностранцев я и отошел от алгоритма определения по отчеству.
под названием «отчество» я имел ввиду все что после второго пробела.


А если одного и того же человека в одном месте запишут как Оксана Владимировна Владимирович, а в другом — как Владимирович Оксана Владимировна, то первая Оксана станет мужик?
Могу предположить что в обеих случаях будет 0.
Случаев когда ФИО пишут в странном порядке гораздо больше, чем можно предположить. Я проверял на имени «Ольга» (она в любой позиции давала стабильно -1) и отчестве «Олегович» (стабильный +1). В данном случае такие же роли у «Оксаны» и «Владимирович». Думаю, что они будут взаимно уничтожать друг друга и тянуть итоговую оценку к 0. Но тоже завтра протестирую.
Занятно. Поделюсь своими наблюдениями:

1. Азиаты. Китайцы по фамилии и имени другого китайца почти всегда правильно определяют его пол. Связано это с тем, что иероглифы имени (фамилия зависит от отца, поэтому на нее ориентироваться нельзя) имеют самостоятельное значение. Девушкам обычно дают имена «весна», «ласка», «счастье», «любовь», «маленькая»; мужчинам — «деньги», «храбрость», «сильный» и т. д. Конечно, алгоритмизировать такое невозможно, да и работает это не всегда.

2. Европейцы. Вот здесь полный разброд и шатание: есть у меня два/две коллеги по имени Андреа. Та «Андреа», что из Германии, — женщина, а итальянец Андреа — мужчина. У британцев вообще род в языке слабо выражен (ладно хоть у людей есть), отсюда «Саша Александр» из вашего поста. Но больше всего я смеялся над старым испанским мужчиной по имени… Ариэль!
Ариэль — чисто мужское имя, покойного премьера забыли? Это окончание в русском языке обычно звучит как "-ил": Михаил (Михаэль), Гавриил, Самуил, Даниил, Иммануил (Эммануэль).
Замечу, что в указанном ряду вариация на тему «Эммануэль» не столь очевидна в том же французском кинематографе, если вы понимаете, о чем я.
Во французском варианте и Мишель бывает не только Платини, но и ma belle.
К сожалению, это не всегда мужчины. Сходу вспомнил три примера:
1. Русалочка Ариэль
2. Андариэль (Диабло)
3. Галадриэль (Властелин Колец)

И Эммануэль, конечно, как написал arkandos
И Тауриэль там же.
С другой стороны, у Беляева Ариэль был юношей.
Завтра собирался на работу сходить — проверю)
А пока могу предположить, что для первого выдаст +1 (+1 по первым двум частям («Габриэль Хосе») и 0 по всему остальному), а для второго 0 (единственный +1 в части «Луис» (да и то не факт), по остальным частям — 0)
А, у вас не такие иностранцы, да? Я подумал что там будет тонна конфликтов мальчик-девочка )
Если разные части ФИО имеют разный пол, то автоматически итоговый результат не будет выходить за пределы [-1;+1], так что конфликтные ситуации автоматически попадают в зону «не удалось определить пол». Но существенная часть иностранцев имеет первые две части ФИО достаточные для распознания.
А если 7 мальчиковых имён и 3 девочковых?
То вернет 1. Близко к опасной границе, да. Но статистика по второй части слова, как правило, либо усилит уверенность в правильности определения пола либо обнулит ее.
Очень похоже на классическую задачу классификации из машинного обучения — не было попыток копать в эту сторону? Если были, то в чём подводные камни?
В тот момент, когда я писал этот алгоритм, я уже знал что означает термин машинное обучение, но еще не знал как оно работает)
А когда предложенный в статье метод начал работать оказалось, что результат меня удовлетворяет в достаточной степени, и в дальнейшем развитии нет особой необходимости. Основная задача которая передо мной стояла — контролировать корректность присвоения текущего пола, а не определять его на 100% выборки (что в наиболее распространенных алгоритмах машинного обучения требуется, на мой взгляд, гораздо чаще, поскольку обычно отказ от классификации рассматривается как принципиальный недостаток).

Если очень вольно относится к формулировкам, можно сказать, что то что я сделал похож на ансамбль из моделей сделанных методом «ближайших соседей».

В качестве развлечения я строил дерево решений на основе выборки в 50к (и потом усекал его). Получалось что-то вроде
  --pl/sql code
  result:='N';--count=50000;
  
  if sthirdname3='ВИЧ' then
    result:='Y';--count=22831;
  end if;

  if sthirdname3='ГЛЫ' then
    result:='Y';--count=14;
  end if;

  if sthirdname3='МИЧ' then
    result:='Y';--count=19;
  end if;

  if sthirdname3='ЬИЧ' then
    result:='Y';--count=60;
  end if;

  if sthirdname3 is null then
    result:='Y';--count=229;
    
    if sname2='НА' then
      result:='N';--count=20;
    end if;
  end if;

где sthirdname3 — последние 3 буквы отчетсва, sname2 — 2 буквы имени
result:='Y'; — мужской пол
result:='N'; — женский пол

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

В некоторых задачах — безусловно так, но интересно, насколько это именно обычно. На мой непрофессиональный взгляд, Ваша постановка задачи — классифицировать простые данные с уверенностью 99.999%, а сложные оставить человеку — кажется очень естественной.
Да, вот тоже хотел предложить запихать все в какой-нить стандартны классификатор и посмотреть, что получится…
Особенно интересно, каких правил random forest навыращивает :)
yadi.sk/i/O8T-ZRN6mfbjA набор данных на котором я играл с классификаторами. Там всего 50 тыс записей, но для экспериментов вполне достаточно. Развлекайтесь))
параметр WN — специально включенный мусорный столбец чтобы посмотреть насколько хорошо алгоритм справляется со случайным шумом.
добавил апдейт в статью — выборку на 500к с теми же параметрами для анализа
Не совсем понял вот какой момент. А если в обучающей выборке по фамилии «Иванченко» есть 5000 мужчин и 5001 женщина, то что вернет алгоритм при разборе очередного(-ой) Иванченко? "-1" по фамилии?
нет, 0. сработает вот это правило:
if mcnt/fcnt>0.5 and mcnt/fcnt<2 then  return 0; end if; -- перевес одного пола не решающий


Для того, чтобы пол определился, нужно чтобы один пол превысил другой хотя бы в 2 раза.
Ага, проглядел, спасибо.

На самом деле хочется вроде что-то сказать, порассуждать, новые идеи подкинуть, да толком нечего. Если у вас всего 6 ошибок на несколько сотен тысяч, то остается только поздравить :)
И как всегда, во всём виноваты иностранцы. :)
Ну, стоит это скептически воспринимать))
Я просто не придумал никакого более надежного способа проверки, чем ручной. Но в реальности, этот способ может быть ужасен: агент хочет продать страховку китайцу (физлицу) — система говорит что пол не верный — продавец меняет пол на тот, который система требует (не отказываться же от сделки?) и никому ничего не говорит. Да будут какие-то отличия в печатном бланке, но авось клиент не заметит.

Я смотрел изредка логи — на каких именах срабатывает проверка. В подавляющем большинстве случаев я был согласен с решением функции, но для части срабатываний у меня не было уверенности. Так что, возможно, ошибок было не 6, а в несколько раз больше. Что, впрочем, тоже довольно неплохо.
Хотя статья не про это, но просто интересно, почему данные от страховщиков попадают без administrative gender. Они приходят в каком-то Excel файле или как? И вторая мысль — а какой пол вы считаете, биологический или административный (особенно для тайландских фамилий, ну вы поняли).
Да, большая часть информации попадает в базу из excel — файлов присылаемых клиентами. Они на своей стороне генерят эти файлы из своих систем, где они ведут кадровый учет. По вполне понятным причинам мы не можем проверять биологический пол при принятии на страхование (особенно когда коллектив 10+ тысяч человек, но даже для одного человека это было бы, гхм, двусмысленной проверкой).
Ни в одном месте где я работал, не было разделения на биологический и декларируемый пол. Вероятная причина — различие между ними встречается столь редко, что потенциальная недополученная прибыль теряется на фоне других, гораздо более мощных факторов. Если наши сотрудники осуществляющие контроль счетов от мед учереждений увидят, что пол не соответсвует декларации — они просто изменят его или повесят соответсвующий повышающий коэф на человека с уместным случаю комментарием (т.е. при повторном принятии на страхование застраховаться по стандартным тарифам он не сможет).
А вот тот, кто заминусовал мой коммент не желает мне в личку написать, я ему популярно объясню что такое administrative и biological gender на основе стандартов (HL7, SNOMED CT).

giffok: Опять же вопрос скорее не к вам, но этот велосипед долго обсуждали и придумали всякие HL7 сообщения, и хотя там administrative gender опционален, но ни чего не мешает constrain the model для совместимости процессов.
С восточными именами ещё одна засада. То что в одной стране мужское имя, то в другой — женское и наоборот. Например, у Асет Вацуевой, Асет — этор женское имя, но в Казахстане — это мужское имя. В Средней Азии слог -глюль, дословно «цветок» это верный признак женского имени, но в Турции — этот слог встречается в мужских именах. А ещё имя Ардак в Казахстане явлется унисексом.
Пример – «Иванов Наталья Сергеевна». В данном случае, наиболее вероятно, что допущена опечатка в фамилии – забыта буква «а» в конце.

Если она живёт за границей, то буква «а» в конце опущена намеренно. Так как иностранцами «Иванова» и «Иванов» воспринимаются как две совершенно разные фамилии.
Мы никогда не видели большинство из них в глаза, все, что мы имели – списки застрахованных, где пол иногда был указан (с большим количеством ошибок), но чаще – не указан вообще. Большинство компаний имеют свою специфику работы и профессиональные традиции, в силу чего, в их коллективах преобладают люди одного пола. Даже небольшая ошибка могла сделать потенциально прибыльный договор убыточным

А нельзя было сделать «как все»: 1) в анкете нужно указать пол 2) если при страховом случае выяснилось, что данные ошибочны, отказывают в выплате (или делаю суброгацию)?
Это не очень клиентоориентированно)
Можно, отказывать в выплате, но мне кажется, что определение пола и корректных тарифов — наша проблема, а не клиентов. Ну например, у клиентов эта информация может просто не хранится в их системе кадрового учета.
О суброгациях: возможно они присутствовали в неявном виде до того как я начал реализацию проекта (в момент согласования с клиентом счета за очередную рассрочку — ибо, как ни странно, этот процесс был очень далек от стандартизации).
Остап Сулейман Ибрагим Берта Мария Бендер-бей Задунайский
Па́бло Дие́го Хосе́ Франси́ско де Па́ула Хуа́н Непомусе́но Мари́я де лос Реме́диос Сиприа́но де ла Санти́сима Тринида́д Ма́ртир Патри́сио Руи́с и Пика́ссо
Хотя наверное это не часто встречается :)

А если серьезно, вот реальный пример мужского имени (фамилия отброшена), как система обработает? — Дидье Селин Франсис
У меня коллега Неус Фелиу Торрес. Фелиу и Торрес — фамилии матери и отца) в Сбербанке карту выдали на Фелиу Торрес в итоге) Каталонка.
Sign up to leave a comment.

Articles

Change theme settings