in pushservice/src/main/scala/com/twitter/frigate/pushservice/rank/RFPHRanker.scala [186:231]
private def setProducerQuality(
target: Target,
candidates: Seq[CandidateDetails[PushCandidate]],
userHealthSignalStore: ReadableStore[Long, UserHealthSignalResponse],
producerMediaRepresentationStore: ReadableStore[Long, UserMediaRepresentation]
): Unit = {
lazy val boostRatio =
target.params(PushFeatureSwitchParams.QualityUprankingBoostForHighQualityProducersParam)
lazy val downboostRatio =
target.params(PushFeatureSwitchParams.QualityUprankingDownboostForLowQualityProducersParam)
candidates.foreach {
case CandidateDetails(pushCandidate, _) =>
HealthFeatureGetter
.getFeatures(pushCandidate, producerMediaRepresentationStore, userHealthSignalStore).map {
featureMap =>
val agathaNsfwScore = featureMap.numericFeatures.getOrElse("agathaNsfwScore", 0.5)
val textNsfwScore = featureMap.numericFeatures.getOrElse("textNsfwScore", 0.15)
val nudityRate = featureMap.numericFeatures.getOrElse("nudityRate", 0.0)
val activeFollowers = featureMap.numericFeatures.getOrElse("activeFollowers", 0.0)
val favorsRcvd28Days = featureMap.numericFeatures.getOrElse("favorsRcvd28Days", 0.0)
val tweets28Days = featureMap.numericFeatures.getOrElse("tweets28Days", 0.0)
val authorDislikeCount = featureMap.numericFeatures
.getOrElse("authorDislikeCount", 0.0)
val authorDislikeRate = featureMap.numericFeatures.getOrElse("authorDislikeRate", 0.0)
val authorReportRate = featureMap.numericFeatures.getOrElse("authorReportRate", 0.0)
val abuseStrikeTop2Percent =
featureMap.booleanFeatures.getOrElse("abuseStrikeTop2Percent", false)
val abuseStrikeTop1Percent =
featureMap.booleanFeatures.getOrElse("abuseStrikeTop1Percent", false)
val hasNsfwToken = featureMap.booleanFeatures.getOrElse("hasNsfwToken", false)
if ((activeFollowers > 3000000) ||
(activeFollowers > 1000000 && agathaNsfwScore < 0.7 && nudityRate < 0.01 && !hasNsfwToken && !abuseStrikeTop2Percent) ||
(activeFollowers > 100000 && agathaNsfwScore < 0.7 && nudityRate < 0.01 && !hasNsfwToken && !abuseStrikeTop2Percent &&
tweets28Days > 0 && favorsRcvd28Days / tweets28Days > 3000 && authorReportRate < 0.000001 && authorDislikeRate < 0.0005)) {
producerBoostedCounter.incr()
pushCandidate.setProducerQualityUprankingBoost(boostRatio)
} else if (activeFollowers < 5 || agathaNsfwScore > 0.9 || nudityRate > 0.03 || hasNsfwToken || abuseStrikeTop1Percent ||
textNsfwScore > 0.4 || (authorDislikeRate > 0.005 && authorDislikeCount > 5) ||
(tweets28Days > 56 && favorsRcvd28Days / tweets28Days < 100)) {
producerDownboostedCounter.incr()
pushCandidate.setProducerQualityUprankingBoost(downboostRatio)
} else pushCandidate.setProducerQualityUprankingBoost(1.0)
}
}
}