sourcecode/scoring/mf_multi_group_scorer.py (31 lines of code) (raw):

from . import constants as c from .mf_base_scorer import coalesce_columns from .mf_group_scorer import MFGroupScorer import pandas as pd def coalesce_multi_group_model_scored_notes(scoredNotes: pd.DataFrame) -> pd.DataFrame: """Coalesce all multi group modeling columns across note scoring. Since each Scorer must have distinct output columns, we use coalescing to run multiple instances of MFGroupScorer objects and then condense the results into a single set of columns. This approach works because each note will be scored by at most one MFGroupScorer instance. """ for col in [ c.multiGroupNoteInterceptKey, c.multiGroupNoteFactor1Key, c.multiGroupRatingStatusKey, c.modelingMultiGroupKey, c.multiGroupInternalActiveRulesKey, c.multiGroupNumFinalRoundRatingsKey, ]: scoredNotes = coalesce_columns(scoredNotes, col) return scoredNotes def coalesce_multi_group_model_helpfulness_scores(helpfulnessScores: pd.DataFrame) -> pd.DataFrame: """Coalesce all group modeling columns across user scoring. Since each Scorer must have distinct output columns, we use coalescing to run multiple instances of MFGroupScorer objects and then condense the results into a single set of columns. This approach works because each note will be scored by at most one MFGroupScorer instance. """ for col in [c.multiGroupRaterInterceptKey, c.multiGroupRaterFactor1Key, c.modelingMultiGroupKey]: helpfulnessScores = coalesce_columns(helpfulnessScores, col) return helpfulnessScores class MFMultiGroupScorer(MFGroupScorer): def _init_column_names(self): self._groupNoteInterceptKey = f"{c.multiGroupNoteInterceptKey}_{self._groupId}" self._groupNoteFactor1Key = f"{c.multiGroupNoteFactor1Key}_{self._groupId}" self._groupRatingStatusKey = f"{c.multiGroupRatingStatusKey}_{self._groupId}" self._groupInternalActiveRulesKey = f"{c.multiGroupInternalActiveRulesKey}_{self._groupId}" self._groupNumFinalRoundRatingsKey = f"{c.multiGroupNumFinalRoundRatingsKey}_{self._groupId}" self._groupRaterInterceptKey = f"{c.multiGroupRaterInterceptKey}_{self._groupId}" self._groupRaterFactor1Key = f"{c.multiGroupRaterFactor1Key}_{self._groupId}" self._modelingGroupKey = f"{c.modelingMultiGroupKey}_{self._groupId}" def get_name(self): return f"MFMultiGroupScorer_{self._groupId}"