def __init__(
    self,
    ratingRecencyCutoffMinutes: int = 15,
    helpfulnessRaterMin: int = 1,
    tagRaterMin: int = 5,
    helpfulTagPercentile: int = 10,
    notHelpfulTagPercentile: int = 50,
    penalty: str = "l1",
    C: float = 0.04,
    maxIter: int = 2500,
    verbose: int = 0,
    classWeight: Dict[int, int] = {0: 1, 1: 1},
    trainSize: float = 0.9,
    solver: str = "liblinear",
    tol: float = 1e-4,
    seed: Optional[int] = None,
    crhFpRate: float = 0.6,
    tag_ratio_bins: int = 10,
    rating_count_bins: int = 7,
    factor_stats_bins: int = 10,
    burst_bins: int = 5,
    latency_bins: int = 10,
    peer_note_count_bins: int = 4,
  ):
    """Configure PFlipModel.

    Args:
      ratingRecencyCutoffMinutes: Avoiding skew in training requires identifying the time at which
        the note would have been scored in production and which notes / ratings would have been
        available at that time.  ratingRecencyCutoffMinutes specifies the assumed latency from
        rating creation through to when a rating becomes available in final scoring (e.g. if we know
        a note was set CRH at a particular point in time then we require ratings be created at least
        ratingRecencyCutoffMinutes minutes earlier).
    """
    self._pipeline: Optional[Pipeline] = None
    self._predictionThreshold: Optional[float] = None
    self._ratingRecencyCutoff = 1000 * 60 * ratingRecencyCutoffMinutes
    self._helpfulnessRaterMin = helpfulnessRaterMin
    self._tagRaterMin = tagRaterMin
    self._helpfulTagPercentile = helpfulTagPercentile
    self._notHelpfulTagPercentile = notHelpfulTagPercentile
    self._penalty = penalty
    self._C = C
    self._maxIter = maxIter
    self._verbose = verbose
    self._classWeight = classWeight
    self._solver = solver
    self._tol = tol
    self._trainSize = trainSize
    self._seed = seed
    self._crhFpRate = crhFpRate
    self._tag_ratio_bins = tag_ratio_bins
    self._rating_count_bins = rating_count_bins
    self._factor_stats_bins = factor_stats_bins
    self._burst_bins = burst_bins
    self._latency_bins = latency_bins
    self._peer_note_count_bins = peer_note_count_bins
    self._column_thresholds: Dict[str, float] = dict()
Configure PFlipModel.

    Args:
      ratingRecencyCutoffMinutes: Avoiding skew in training requires identifying the time at which
        the note would have been scored in production and which notes / ratings would have been
        available at that time.  ratingRecencyCutoffMinutes specifies the assumed latency from
        rating creation through to when a rating becomes available in final scoring (e.g. if we know
        a note was set CRH at a particular point in time then we require ratings be created at least
        ratingRecencyCutoffMinutes minutes earlier).
    
sourcecode/scoring/pflip_plus_model.py