Open source · MIT

Kin

Слияние дублей: находит одного и того же человека, записанного по-разному, и показывает, из чего сложилась оценка.

v1.0.0 Видно, из чего сложилась оценка
FastAPIPython 3.13PostgreSQL 18psycopg 3Jinja2Tailwind 4
Kin

Один человек, три записи

В любой клиентской базе рано или поздно лежит один и тот же человек трижды: раз из выгрузки CRM, раз из формы на сайте, раз из системы, которую заменили два года назад. В фамилии опечатка, телефон записан в другом формате, в дате рождения переставлены день и месяц, а старая система писала всё латиницей.

Инструменты дедупликации отвечают одним числом и оставляют человека гадать. Kin показывает арифметику: какие поля совпали, сколько каждое дало в итог, где стоят два порога и — по уже принятым решениям — сколько пар текущие пороги отправят не туда.

Что внутри

Блокировка вместо перебора

Каждой записи выдаётся несколько грубых ключей — начало фамилии с годом рождения, с именем, с городом, последние семь цифр телефона, локальная часть почты. На демо-базе это превращает 2,1 млн возможных пар в 5 934 кандидата, не потеряв ни одного настоящего дубля: полноту считает сам сидер и печатает её.

Метрики написаны руками

Джаро — Винклер с надбавкой за общее начало, ограниченное расстояние Левенштейна, пересечение слов адреса и сравнение дат, которое знает две самые частые ошибки ввода: переставленные день с месяцем и опечатку в годе.

Транслитерация внутри

«Соловьёва» встречается с «Solovieva», а «Королёв» с «Korolev». Имена сравниваются и по оригиналу, и по транслитерации, и в зачёт идёт лучшее из двух — старая система, писавшая латиницей, перестаёт быть отдельной базой.

Два порога с предпросмотром

Ползунки стоят под гистограммой и делят с ней шкалу. Двигаете — и сразу видно, что сольётся автоматически, что уйдёт человеку, а что отбросится. Сохранение — отдельным действием, после того как последствия показаны.

Очередь и есть разметка

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

Кластеры со слабейшей связью

Принятые пары объединяются непересекающимися множествами, и у каждого кластера видна самая слабая связь внутри. Цепочки, где A похож на B, B на C, а A и C не имеют ничего общего, всплывают наверх — это главная опасность таких систем.

Скриншоты

Пороги: гистограмма оценок и две подвижные черты
Пороги: гистограмма оценок и две подвижные черты
Разбор: поля бок о бок и вклад каждого в оценку
Разбор: поля бок о бок и вклад каждого в оценку
Предпросмотр: что будет, если сдвинуть пороги
Предпросмотр: что будет, если сдвинуть пороги
Кластеры: сверху самые подозрительные
Кластеры: сверху самые подозрительные
Кластер: состав и золотая запись
Кластер: состав и золотая запись
Тёмная тема
Тёмная тема

Установка

git clone https://github.com/dripips/kin.git cd kin docker compose up --build

Есть проект или идея?

Напишите мне, обсудим задачу.