Sorry, I forgot to reply to this one and it is a really good point:
@phobbs5 said in #13:
> Regarding the model training on its own labels, how would you go about reframing the problem to avoid the predict-your-labels problem? Given that cheating detection has a massive scale problem and confessions are rare, would you rely on supplying human arbiters with heuristics and deriving labels from the arbiter's decisions? Could you augment the dataset with "artificial" cheating to make the training data more robust?
Disclaimer: I already had a beer, so this may be flawed, but thinking about how to get labels for cheating detection properly is a good thought.
Unless Lichess proves me wrong, I would say the percentage of confessions out of flagged cheaters is negligible. Relying on this to get labels is not going to work.
Here is how I would do it and it's wild - ASK PEOPLE TO CHEAT. No, don't stop reading here and start writing a response to call me crazy, hear me out and let me describe how this could work:
Lichess could reach out to players to sign-up for a "anti-cheater program". The selection of players would have to be as random as possible (this is important!), but you'd probably have to make some restrictions (e.g., you could use only accounts that have existed for more than a year) and I'd rely on Lichess to make the right call here. Once players, which have signed up for this program, queue for a new game, there would be a low percentage probability that you'd have a window pop-up to tell them that their next game is a "cheating game" and ask them to "prepare their engine(s)" (or you could ask if it would be ok if they played this game for the anti-cheating program). Once they confirm readiness, they could play the game and afterwards confirm they have cheated. You could even have a post-game labeling process asking them "how did you cheat?" (e.g., "used a separate mobile", "clicked on my other open browser tab with stockfish" etc.) and potentially even ask them to mark moves where they cheated (this would address the issue of occasional cheaters).
The players playing against those "programmatic cheaters" would obviously get a refund on their rating (and the programmatic cheater would not gain rating) as well as a message telling them that Lichess is grateful they played the last game against a cheater to improve Lichess mechanisms against actual cheating. It's important they do not know during the game that they are playing a programmatic cheater. You could even reward those people with some icon or whatever (I am not a marketing/gamification person, so maybe someone has a better idea for rewards...). The mechanism would also allow two programmatic cheaters to play against each other with different cheating methods.
This is not fleshed out in all details, but if you'd ask me to address this, the approach outlined above would be my first starting point to obtain better cheating labels. If you obtain sufficiently large quantities of such labels generated by programmatic cheaters, even cases where signed-up players try to mess up your data set by deliberately not cheating would not be significant on the model.
This is just a proposal, but once you have read this, feel free to down-vote me and throw all kinds of insults ;-)
@phobbs5 said in #13:
> Regarding the model training on its own labels, how would you go about reframing the problem to avoid the predict-your-labels problem? Given that cheating detection has a massive scale problem and confessions are rare, would you rely on supplying human arbiters with heuristics and deriving labels from the arbiter's decisions? Could you augment the dataset with "artificial" cheating to make the training data more robust?
Disclaimer: I already had a beer, so this may be flawed, but thinking about how to get labels for cheating detection properly is a good thought.
Unless Lichess proves me wrong, I would say the percentage of confessions out of flagged cheaters is negligible. Relying on this to get labels is not going to work.
Here is how I would do it and it's wild - ASK PEOPLE TO CHEAT. No, don't stop reading here and start writing a response to call me crazy, hear me out and let me describe how this could work:
Lichess could reach out to players to sign-up for a "anti-cheater program". The selection of players would have to be as random as possible (this is important!), but you'd probably have to make some restrictions (e.g., you could use only accounts that have existed for more than a year) and I'd rely on Lichess to make the right call here. Once players, which have signed up for this program, queue for a new game, there would be a low percentage probability that you'd have a window pop-up to tell them that their next game is a "cheating game" and ask them to "prepare their engine(s)" (or you could ask if it would be ok if they played this game for the anti-cheating program). Once they confirm readiness, they could play the game and afterwards confirm they have cheated. You could even have a post-game labeling process asking them "how did you cheat?" (e.g., "used a separate mobile", "clicked on my other open browser tab with stockfish" etc.) and potentially even ask them to mark moves where they cheated (this would address the issue of occasional cheaters).
The players playing against those "programmatic cheaters" would obviously get a refund on their rating (and the programmatic cheater would not gain rating) as well as a message telling them that Lichess is grateful they played the last game against a cheater to improve Lichess mechanisms against actual cheating. It's important they do not know during the game that they are playing a programmatic cheater. You could even reward those people with some icon or whatever (I am not a marketing/gamification person, so maybe someone has a better idea for rewards...). The mechanism would also allow two programmatic cheaters to play against each other with different cheating methods.
This is not fleshed out in all details, but if you'd ask me to address this, the approach outlined above would be my first starting point to obtain better cheating labels. If you obtain sufficiently large quantities of such labels generated by programmatic cheaters, even cases where signed-up players try to mess up your data set by deliberately not cheating would not be significant on the model.
This is just a proposal, but once you have read this, feel free to down-vote me and throw all kinds of insults ;-)