스팀헌트 랭킹시스템에 Diversity Score 도입

in #kr3 years ago

안녕하세요, 어제부로 스팀헌트의 랭킹시스템에 큰 변화가 있었습니다. 바로 Diversity Score (DS)가 새롭게 적용되었는데요, 본론으로 들어가기에 앞서 저희가 지금까지 이 ABV (Account Based Voting) 시스템을 만들기 위해 어떤 고민을 해 왔는지 간략하게 공유하고자 합니다.

ABV를 도입하기 까지

스팀헌트는 스팀 디앱이므로 스팀잇의 "stake-weighted voting" 시스템을 기반으로 시작했었습니다. 하지만 매일매일 유저들의 업보팅에 의해 랭킹 경쟁을 벌이는 플랫폼으로서 해당 랭킹 시스템은 비드봇, 큐레이션 테일, 고래들의 셀봇 등등 스파에 의해 랭킹을 얼마든지 교란시킬 수 있는 문제를 야기했습니다. 이에, 스팀헌트는 아직 스팀잇 본사에서도 논의중에 있는 ABV (Account Based Voting)시스템을 먼저 도입하기 위해 수 많은 연구와 시뮬레이션을 시도하기 시작합니다. 저희가 지금까지 고민해 본 내용들은 깃허브 이슈 - https://github.com/Steemhunt/web/issues/135 에서도 확인 가능합니다.

  1. 1유저-1보팅을 그냥 바로 도입하면 누구나 알트계정을 수십 수백개 만들어서 바로 어뷰징이 가능하기 때문에 이를 막기 위해 아이러니하게도 맨 처음 고민한건 (지금 운영중인) 스팀 명성도를 활용한 보팅 웨잇 차등 적용 시스템 입니다. 다만, 이걸 고민하다 보니, 뭔가 스팀헌트 커뮤니티 공헌도를 반영한 우리만의 명성 시스템이 없을까 고민하다가 이 힘든 여정이 시작됩니다...

  2. 지금까지 탑 섹션에 오른 헌팅 수를 기반으로 이를 누적한 5단계의 헌터 레벨 제도를 구상해 봤습니다. 나이스한 뱃지도 디자인 해 봤죠. 하지만 이 아이디어는 매일 개별 헌터의 데이터를 매번 스냅샷을 떠야하는 문제가 있습니다. 특히 유저가 늘어나면 해당 트래픽은 점점 더 버거워지겠죠.

  3. 스팀헌트에서 가장 중요한 활동은 바로 업보팅이죠. 이를 기반으로 본인이 커뮤니티내에서 사용하는 보팅 파워가 계속 누적해서 쌓이는 Hunter Curation Score (HCS)를 구상해 봤습니다. 심플하게 해당 헌터가 스팀헌트에서 많이 업보팅을 할 수록 해당 HCS가 늘어나고, 레벨이 올라가서 본인의 영향력도 (보팅 웨잇) 더 강력해 지는 시스템입니다.

  4. 위 HCS에는 치명적인 결함이 있는데요, 바로 스팀 유저가 하루에 거의 무한대로 업보팅을 남발할 수 있는 이슈 입니다. 스팀잇에서야 보팅을 남발할수록 잔여 보파가 줄어들고 보팅 금액도 줄어들기 때문에 전혀 문제가 되지 않지만, ABV 기반에서는 어차피 1보팅에 1점씩 균일하게 증가하기 때문에 자칫 HCS를 늘리기 위해 업보팅을 남발할 수 있죠. STEEM_VOTE_DUST_THRESHOLD라는 미니멈 값이 있긴 하지만 스파가 어느정도만 있어도 거의 무한대에 가깝게 보팅이 가능하더군요 (실험도 해봤습니다).

  5. 위 이슈는 사실 유저가 스팀헌트에서 업보팅 할때 현재 잔여 보파 데이터를 알 수 있다면 쉽게 해결되는 문제겠지만, 아쉽게도 그렇지 않습니다. 스팀헌트에서 업봇할때 저희가 알 수 있는 정보는 다음과 같습니다. {"voter"=>"project7", "weight"=>622706, "rshares"=>"406089967416", "percent"=>10000, "reputation"=>"5834971324537", "time"=>"2018-03-03T06:13:03"} 여기 그 어디에도 현재 잔여 보파에 대해 알 수 있는 정보는 없죠...

  6. 위 문제를 해결하기 위해 하루에 10회 풀보팅 패턴을 활용해서 HCS가 하루 맥스 1000점만 쌓이고, 2000점 이상부터는 오히려 HCS가 감소하게 만드는... plus-buffer-minus HCS 시스템을 구상해 봤습니다. 예를들어 해당 유저가 그날 2000점 이상을 쌓으려고 보팅을 남발하게 되면 오히려 그 다음부터는 하루에 맥스로 쌓은 1000점이 깎이는거죠. 2100 -> 900, 2200 -> 800, ... 이렇게 해서 무한대로 마이너스가 되는 시스템입니다.

  7. 위의 6번까지 다다르니 이제 초기에 저희가 해결하고자 했던 문제가 뭐지?? 하고 헷깔리기 시작합니다. 잡스 형님이 항상 강조하던게 있죠. 심플한게 항상 최고라는... 그래서 결국 다시 1번으로 돌아가서 1번제도를 시행할때 우려되는 문제를 다른 시스템으로 풀어보기로 결정했습니다. 이런 과정으로 탄생한게 현재 스팀헌트의 ABV 기반 랭킹 시스템 입니다.


(이런 무지막지한 경험치(?) 제도까지 구상했었습니다)

Introducing Diversity Score

저희가 ABV 랭킹 시스템을 도입하면서 상호보팅 이슈를 해결하고자 강력한 블랙리스트 및 제보자 바운티 제도를 운영하고 있죠. 하지만 이는 시스템적인 해결책은 될 수 없습니다. 전혀 scalable 하지도 않고요. 이에 저희가 자체적으로 상호보팅 패턴을 분석해서 해당 유저의 스팀헌트 내 보팅 다양성이 높을수록 보팅 웨잇이 높아지고, 상호보팅 패턴이 강하게 나타날 수록 보팅 웨잇이 줄어드는 Diversity Score (DS)를 개발했습니다.

이 다양성 점수는 Gini–Simpson index (https://en.wikipedia.org/wiki/Diversity_index#Gini–Simpson_index)라는 다양성 지수에서 개념을 얻어와서, 저희 스팀헌트의 보팅 패턴에 맞게 자체적으로 튜닝하여 적용했습니다. 정확한 공식을 공개하면 또 어뷰징의 대상이 될 수 있으니 (라곤 하지만 사실 스팀헌트는 오픈소스 프로젝트라서 코드는 모두 공개되어 있습니다...ㅎㅎㅎ) 간략하게만 설명드리면 다음과 같습니다.

이 다양성 점수는 최소값 0 ~ 최대값 1을 갖습니다. 만약 해당 헌터가 소수의 헌터들 끼리만 보팅을 하고, 다른 헌터들의 포스팅에는 보팅을 잘 안한다면 이 점수는 낮게 계산됩니다. 반대로 다양한 헌터들에게 보팅이 가면 이 점수는 1에 가까워 지죠. 여기에는 보팅 웨잇도 함께 계산됩니다. 즉, 보팅을 골고루 하긴 하지만 특정 헌터에게 보팅 웨잇을 몰아줄 경우 이 점수는 낮게 계산됩니다.

이렇게 계산되는 다양성 점수가 본인의 기본 보팅 웨잇에 곱해집니다. 예를들어 어떤 헌터가 스팀 명성도가 60인 경우 스팀헌트의 기본 보팅 웨잇은 x3이 되죠. 근데 만일 이 헌터의 다양성 지수가 현재 0.7로 계산된다면 그 헌터의 보팅 웨잇은 최종 2.1 (3.0 x 0.7)이 됩니다.

이 다양성 점수는 해당 헌터가 아직 스팀헌트에서 보팅 이력이 충분하지 않을 경우 패널티 웨잇이, 그리고 오랫동안 활동했고 보팅도 다양하게 잘 하는 헌터일수록 어드벤티지 웨잇이 적용됩니다. 즉, 어떤 헌터는 본인의 기본 웨잇보다도 더 높은 보팅웨잇을 얻을수도 있게 되는거죠.

Steemhunt ABV with DS

스팀헌트 ABV 랭킹 시스템은 유저의 어뷰징 소요를 막고 최대한 공정한 랭킹 시스템이 될 수 있도록 다음과 같은 장치를 운영하고 있습니다.

  1. 오직 스팀헌트에서 이루어지는 보팅만이 랭킹 점수에 반영됩니다.
  2. 부계정 이슈를 감소시키기 위해 스팀 공헌도가 보팅 웨잇에 반영됩니다.
  3. 셀프 보팅은 점수에 반영되지 않습니다.
  4. 화이트리스트와 블랙리스트를 운영합니다.
  5. 상호보팅의 영향력을 줄이기 위해 다양성 점수 (Diversity Score)가 보팅 웨잇에 곱해집니다.

What's Next?

사실 이 지구상의 그 어떤 시스템을 가져와도 어뷰징 소요가 완벽히 차단되는건 거의 불가능합니다. 특히 오픈된 플랫폼에서는 더더욱 어뷰징을 차단하는게 쉽지 않죠. 하지만 저희 스팀헌트 팀은 이런 어뷰징 소요를 최대한 시스템적으로 "약화"시키기 위해 앞으로도 링크 클릭에 의한 업보팅 트래픽, 자동 봇으로 들어오는 트래픽, 업보팅 경로분석 (유저가 자연스럽게 랭킹 보드를 보다가 들어와서 업보팅을 하는게 아닌 부자연스러운 경로들 골라내기) 등등 다양한 툴을 개발하여 랭킹 시스템에 적용할 예정입니다.

다양성 점수 (DS) 제도는 한국시간 기준 2018년 6월 23일 00시 부터 적용되었습니다.

...



Please follow @steemhunt account and join our chat channels (Discord is more active):





Steemhunt

A place where you can dig products and earn STEEM.
Steemhunt.com

Support Steemhunt with Steem Power Delegation:
500 SP |1000 SP |5000 SP |10K SP |20K SP |50K SP |100K SP

More information about our Sponsor program is here
More information about HUNT Token Airdrop is here
Support Steemhunt by following our curation trail

Sort:  

Nice analysis for steem hunt project7

스팀헌트에 대한 얘기보고 갑니다.~ 좋은 많이 많이 글 써주세요~~

안녕하세요.

스팀잇을 처음시작하는 초보 justafeeling입니다.

팔로우와 보팅해주시면 저도 항상 찾아오겠습니다.

오늘 하루도 즐겁게 보내시고 화이팅입니다 사랑해요 ><

Good morning.

It is just beginning to start Steam It.

Follow me and I will always come to visit you.

I am happy to spend the day with you today>

화이팅입니다 ㅎ

대단하십니다!!^^

자세히 설명해주셔서 감사합니다!!!
한가지 질문은;

#6. 1000점만 쌓이고, 2000점 이상부터는 오히려 HCS가 감소하게 만드는... plus-buffer-minus HCS 시스템을 구상해 봤습니다.

이것이 뉴 랭킹 system 에는 적용이 되는것 입니까? 아니면 구상만 했던건인지요?
항상 힘써 주셔서 감사드립니다.
좋은 주말 되십시요!

저도 논문에 한표요ㅋㅋㅋ
와...진짜 @project7님과 타브리스님 스팀잇기반 서비스의 선구자!!

정말 공정한 시스템을 구상하기 위해 노력 많이 하신 것이 보입니다. 완벽한 제도는 없지만 스팀헌트 개발진께서 이렇게 고민을 해주시니 조금 더 모두가 생각하는 이상에 한걸음 다가갈 수 있지 않을까 생각이 드네요.

커뮤니티를 위해 많은 노력을 해주시는 점 늘 감사하게 생각하고 있습니다.

제 미약한 보팅파워가 원망스럽습니다!ㅠㅠ 최근 며칠 스팀헌트 못봤는데 한번 보러 가야겠네요.
스팀잇의 새로움은 거의 익숙해졌는데 스팀헌트가 새로움에 대한 욕구?를 채워주고 있습니다 :)

처음 한번 주더니 안주더라구요 코인 ㅎㅎㅎㅎ

1번으로 다시 돌아가서 문제를 되짚어 본 점이 흥미롭네요. 자칫 솔루션만 찾다보면 본질이 무엇이었는지 기억나지 않을 때가 있는데 잘 돌아오신 것 같습니다. ㅎㅎ. 언제나 홧팅입니다.

예전에 제가 올렸던 Inverse Simpson이랑 같은 맥락의 개념을 쓰셨네요 (richness와 diversity를 동시에 측정하는거죠).
저는 그 때 Simpson이나 Gini-Simpson은 변화량이 민감하고 가독성이 떨어져 쓰지 않았는데 랭킹 시스템에 쓰기에는 Simpson이나 Gini-Simpson도 괜찮겠네요 ^^

안녕하세요 클레욥님! 네 안그래도 클레욥님이 예전에 올리셨던 글도 잘 참고했습니다. 감사합니다 :) 저희 스팀헌트 다양성점수는 일단 지니심슨을 기본으로 한 이유는 기본 보팅 웨잇에 곱하기 위해서는 최소-최대가 1.0 아래로 노는 지표가 필요했던게... 가장 큰 이유였습니다 ㅎㅎ

현재는 더 업그레이드 되서, diversity score 계산 값에 스팀헌트에서의 보팅 데이터 히스토리에 따라 패널티-어드벤티지를 부여하는 로직이 추가되었고, circle_voting 패널티라고 해서, 서로 상호보팅하는 계정수를 별도로 카운팅 해서 구간별로 추가 패널티가 부여되고 있습니다.

뭐... 사실 아무리 로직을 정교하게 해도 어뷰징 소요를 확실하게 차단하는건 쉽지 않더군요. 저희도 차차 데브팀을 구축하고 나면 이 부분을 더욱 정교하게 다듬어볼 예정입니다^^

매일 고민하시고 매일 연구하시는게 느껴지네요.
응원합니다 스팀헌트

꿀잼입니다. 계속 연구가 깊어지고 살험데이터가 쌓이면 박사논문으로... ㅋㅋ

오오~~이런 고민 응원합니다~~~~

Coin Marketplace

STEEM 0.62
TRX 0.09
JST 0.091
BTC 48012.41
ETH 2140.08
BNB 466.98
SBD 5.30