Как это работает

У большинства NFT-рейтингов редкость трейта — это просто «1 делить на частоту»: чем реже значение, тем больше очков, а очки трейтов просто перемножаются. Проблема в том, что один по-настоящему уникальный трейт может задрать итоговый счёт до небес и обнулить значение всех остальных.

Метод Крамера считает иначе: внутри каждого типа трейта группы значений играют друг с другом «турнир» один на один и получают очки по его итогам. Никакого перемножения вероятностей — только сравнение групп между собой.

Игрушечная коллекция

Возьмём игрушечную коллекцию из 8 котиков с одним типом трейта — «Шляпа». У одного котика корона, у трёх — кепка, а у четырёх шляпы нет вовсе.

Корона — 1 котик, кепка — 3 котика, без шляпы — 4 котика.

Турнир

Внутри типа «Шляпа» у нас три группы: Корона (1 котик), Кепка (3 котика) и Без шляпы (4 котика). Каждая группа по очереди встречается с каждой другой один на один. В паре группы размером N и группы размером M первая получает M/(N+M) очков — чем больше противник, тем больше очков достаётся редкой группе. Сырой балл группы — среднее очков по всем её встречам.

Заметьте: очки за одну встречу всегда лежат между 0 и 1, и сырые баллы после усреднения — тоже. Уникальный трейт не взрывает шкалу. Если бы мы вместо этого взяли просто 1/частота, у Короны получилось бы значение 8 — как будто она «в 8 раз ценнее» самой массовой группы, хотя на деле там всего один котик против четырёх. У нас Корона получает 0.775 — заметно больше остальных, но без экстремального разрыва.

Как считаются сырые баллы для каждой группы типа «Шляпа»

ГруппаПротивРасчётОчки
КоронаКепка3 / (1 + 3)0.75
КоронаБез шляпы4 / (1 + 4)0.8
Корона — Сырой балл (среднее)0.775
КепкаКорона1 / (3 + 1)0.25
КепкаБез шляпы4 / (3 + 4)0.5714
Кепка — Сырой балл (среднее)0.4107
Без шляпыКорона1 / (4 + 1)0.2
Без шляпыКепка3 / (4 + 3)0.4286
Без шляпы — Сырой балл (среднее)0.3143

Нормализация

Сырые баллы неудобно сравнивать между типами трейтов — у каждого типа своя шкала. Поэтому баллы делят на среднее по типу: получается, что средняя ГРУППА типа всегда равна 1. Для «Шляпы» среднее сырых баллов — 0.5, поэтому Корона (0.775 / 0.5) становится 1.55, Кепка (0.4107 / 0.5) — 0.82, а «без шляпы» (0.3143 / 0.5) — 0.63.

Корона1.55
Кепка0.82
Без шляпы0.63

Нормализованные баллы групп типа «Шляпа»; пунктир — уровень 1 (среднее по типу).

«Нет трейта» — тоже значение

Отсутствие шляпы — не пустота, а такое же свойство, как корона или кепка. У него есть своя группа («без шляпы») и свой размер (4 котика из 8) — и она точно так же участвует в турнире наравне с остальными.

Итоговый score

Итоговый score котика — среднее нормализованных баллов его групп по всем типам трейтов. Добавим второй тип — «Фон» с двумя равными группами (Красный × 4, Синий × 4): в паре друг с другом каждая получает 4/(4+4) = 0.5 сырых очков, а после нормализации — ровно 1. Вот как считаются баллы трёх наших котиков.

Шаги вычисления итогового score

КотикШляпаФонРасчётKramer Score
Корона, КрасныйКорона (1.55)Красный (1)(1.55 + 1) / 21.275
Кепка, СинийКепка (0.82)Синий (1)(0.82 + 1) / 20.91
Без шляпы, КрасныйБез шляпы (0.63)Красный (1)(0.63 + 1) / 20.815

Ссылки