Beispiel #1
0
def glicko_update_test():
    table1 = Table(sample_with_time_1,
                   ['primary', 'secondary', 'rate1', 'rate2'],
                   timecol='date')
    table2 = Table(sample_with_time_2,
                   ['primary', 'secondary', 'rate1', 'rate2'],
                   timecol='date')
    gRanker = GlickoRanker()
    gRanker.update(table1)
    gRanker.update(table2)
Beispiel #2
0
def glicko_test():
    # This is illustrating example used in "Example of the Glicko-2 system".
    gRanker = GlickoRanker(rd=200)
    itemRatingLut = {
        'Bob': 1400,
        'Cyan': 1550,
        'Dijkstra': 1700
    }
    itemRDLut = {
        'Bob': 30,
        'Cyan': 100,
        'Dijkstra': 300
    }
    gRanker.setup(itemRatingLut=itemRatingLut, itemRDLut=itemRDLut)
    df = pd.DataFrame(
        {
            'host': ['Alice', 'Alice', 'Alice'],
            'visit': ['Bob', 'Cyan', 'Dijkstra'],
            'hscore': [2, 0, 0],
            'vscore': [0, 2, 2]
        },
        columns=['host', 'visit', 'hscore', 'vscore'])
    tb = Table(df, col=['host', 'visit', 'hscore', 'vscore'])
    gRanker.update(tb)
    assert_equal(gRanker.data.itemnum, 4)
    idx = gRanker.data.itemlut['Alice']  # don't hack this in production code.
    assert_almost_equal(gRanker.miu[idx] * gRanker.factor + gRanker.baseline,
                        1464.06,
                        places=1)
    assert_almost_equal(gRanker.phi[idx] * gRanker.factor, 151.52, places=1)
    assert_almost_equal(gRanker.sigma[idx], 0.05999, places=4)
Beispiel #3
0
def trueskill_prob_win_test():
    table = Table(sample_with_time_1,
                  ['primary', 'secondary', 'rate1', 'rate2'],
                  timecol='date')
    tsRanker = TrueSkillRanker()
    tsRanker.update(table)
    assert_true(tsRanker.prob_win(4, 1) > 0.5)
Beispiel #4
0
 def __init__(self, K=10, xi=400, baseline=1500, drawMargin=0):
     self.K = K
     self.xi = xi
     self.baseline = baseline
     self.drawMargin = drawMargin
     self.data = Table()
     self.indexScoreLut = []
Beispiel #5
0
def elo_prob_win_test():
    table = Table(sample_with_time_1,
                  ['primary', 'secondary', 'rate1', 'rate2'],
                  timecol='date')
    eloRanker = EloRanker()
    eloRanker.update(table)
    assert_true(eloRanker.prob_win(4, 1) > 0.5)
Beispiel #6
0
def massey_rank_test():
    data = Table(sample_paired, col=[0, 1, 2, 3])
    r = MasseyRanker(table=data)
    rst = r.rank(ascending=False)
    assert_array_almost_equal(rst.loc[:, 'rating'].values,
                              np.array([18.2, 18.0, -3.4, -8.0, -24.8]),
                              decimal=2)
Beispiel #7
0
def colley_rank_test():
    data = Table(sample_paired, col=[0, 1, 2, 3])
    r = ColleyRanker(table=data)
    rst = r.rank(ascending=False)
    assert_array_almost_equal(rst.loc[:, 'rating'].values,
                              np.array([0.79, 0.65, 0.50, 0.36, 0.21]),
                              decimal=2)
Beispiel #8
0
def trueskill_another_test():
    tsRanker = TrueSkillRanker(baseline=25,
                               rd=25 / 3.0,
                               performanceRd=25 / 6.0)
    df = pd.DataFrame(
        {
            'host': ['Alice'],
            'visit': ['Bob'],
            'hscore': [1],
            'vscore': [0]
        },
        columns=['host', 'visit', 'hscore', 'vscore'])
    t = Table(df, col=['host', 'visit', 'hscore', 'vscore'])
    tsRanker.update(t)
    idx = tsRanker.data.itemlut['Alice']
    assert_almost_equal(tsRanker.rd * (tsRanker.indexMiuLut[idx] - 3) +
                        tsRanker.baseline,
                        29.396,
                        places=3)
    assert_almost_equal(tsRanker.rd *
                        tsRanker.indexSigmaSqrLut[idx]**(1 / 2.0),
                        7.171,
                        places=3)
    idx = tsRanker.data.itemlut['Bob']
    assert_almost_equal(tsRanker.rd * (tsRanker.indexMiuLut[idx] - 3) +
                        tsRanker.baseline,
                        20.604,
                        places=3)
    assert_almost_equal(tsRanker.rd *
                        tsRanker.indexSigmaSqrLut[idx]**(1 / 2.0),
                        7.171,
                        places=3)
Beispiel #9
0
def trueskill_leaderboard_test():
    table = Table(sample_with_time_1,
                  ['primary', 'secondary', 'rate1', 'rate2'],
                  timecol='date')
    tsRanker = TrueSkillRanker()
    tsRanker.update(table)
    lb = tsRanker.leaderboard()
    return lb
Beispiel #10
0
def glicko_leaderboard_test():
    table = Table(sample_with_time_1,
                  ['primary', 'secondary', 'rate1', 'rate2'],
                  timecol='date')
    gRanker = GlickoRanker()
    gRanker.update(table)
    lb = gRanker.leaderboard()
    return lb
Beispiel #11
0
def elo_leaderboard_test():
    table = Table(sample_with_time_1,
                  ['primary', 'secondary', 'rate1', 'rate2'],
                  timecol='date')
    eloRanker = EloRanker()
    eloRanker.update(table)
    lb = eloRanker.leaderboard()
    assert_equal(lb.rating.values.sum(), 6000)
    return lb
Beispiel #12
0
def elo_update_test():
    table = Table(sample_with_time_1.iloc[:-1, :],
                  ['primary', 'secondary', 'rate1', 'rate2'],
                  timecol='date')
    eloRanker = EloRanker()
    eloRanker.update(table)
    eloRanker.update_single(2, 3, 0, 1)
    lb = eloRanker.leaderboard()
    assert_array_almost_equal(lb.rating.values,
                              elo_leaderboard_test().rating.values)
Beispiel #13
0
def trueskill_update_test():
    table = Table(sample_with_time_1.iloc[:-1, :],
                  ['primary', 'secondary', 'rate1', 'rate2'],
                  timecol='date')
    tsRanker = TrueSkillRanker()
    tsRanker.update(table)
    tsRanker.update_single(2, 3, 0, 1)
    lb = tsRanker.leaderboard()
    assert_array_almost_equal(lb.rating.values,
                              trueskill_leaderboard_test().rating.values)
Beispiel #14
0
def eld_rank_update_test():
    data1 = Table(sample_with_time_1,
                  col=['primary', 'secondary', 'rate1', 'rate2'],
                  timecol='date')
    data2 = Table(sample_with_time_2,
                  col=['primary', 'secondary', 'rate1', 'rate2'],
                  timecol='date')
    ranker = EloRanker(data1)
    r0 = ranker.rank(ascending=False)
    r1 = ranker.update(data2)

    data3 = Table(pd.concat([sample_with_time_1, sample_with_time_2]),
                  col=['primary', 'secondary', 'rate1', 'rate2'],
                  timecol='date')
    ranker = EloRanker(data3)
    r2 = ranker.rank(ascending=False)

    assert_almost_equal(r1.rating.values, r2.rating.values)
    assert_raises(AssertionError, assert_array_equal, r0.rating.values,
                  r2.rating.values)
    def run_rank(self) -> dict:
        """
        计算评价信息到outTable并返回
        """
        if len(self.rawTable) == 0:
            data = None
        else:
            data = Table(self.rawTable, col=[0, 1, 2, 3])
        if len(self.rawTable) == 0:
            data2 = None
        else:
            data2 = Table(self.rawTable2, col=[0, 1, 2, 3])
        # 封装的评价方式,具体请参考rankit库作者的github
        maseey = MasseyRanker()
        keener = KeenerRanker()
        # 处理无人打分的情况导致的异常
        if data2 != None and data != None:
            maseeyRank = maseey.rank(data2)
            keenerRank = keener.rank(data)
            mergedRank = borda_count_merge([maseeyRank, keenerRank])
            self.outTable = {}
            for index, i in mergedRank.iterrows():
                self.outTable[i[0]] = i[-1]
            return self.outTable
        if data2 != None:
            maseeyRank = maseey.rank(data2)
            mergedRank = maseeyRank
            self.outTable = {}
            for index, i in mergedRank.iterrows():
                self.outTable[i[0]] = i[-1]
            return self.outTable

        if data != None:
            keenerRank = keener.rank(data)
            mergedRank = keenerRank
            self.outTable = {}
            for index, i in mergedRank.iterrows():
                self.outTable[i[0]] = i[-1]
            return self.outTable

        return {}
Beispiel #16
0
def od_rank_test():
    data = Table(sample_paired, col=[0, 1, 2, 3])
    r = ODRanker(table=data)
    rst = r.rank(output='summary', ascending=False)
    print('OD rank: overall rank:')
    print(rst)
    rst = r.rank(output='offence', ascending=False)
    print('OD rank: offence rank:')
    print(rst)
    rst = r.rank(output='defence', ascending=True)
    print('OD rank: defence rank:')
    print(rst)
Beispiel #17
0
def difference_rank_score_difference_test():
    table = Table(sample_paired, col=[0, 1, 2, 3])
    ranker = DifferenceRanker(table)
    rank = ranker.rank()
    rank = rank.set_index('name')
    score_diff = ranker.score_diff(sample_paired.primary.values,
                                   sample_paired.secondary.values)
    t = sample_paired.merge(rank, left_on='primary', right_index=True).\
        merge(rank, left_on='secondary', right_index=True).\
        sort_index()
    score_diff_2 = t.rating_x - t.rating_y
    assert_almost_equal(score_diff, score_diff_2)
    def run_rank(self):
        if len(self.rawTable) == 0:
            data = None
        else:
            data = Table(self.rawTable, col=[0, 1, 2, 3])
        if len(self.rawTable) == 0:
            data2 = None
        else:
            data2 = Table(self.rawTable2, col=[0, 1, 2, 3])

        maseey = MasseyRanker()
        keener = KeenerRanker()
        if data2 != None and data != None:
            maseeyRank = maseey.rank(data2)
            keenerRank = keener.rank(data)
            mergedRank = borda_count_merge([maseeyRank, keenerRank])
            self.outTable = {}
            for index, i in mergedRank.iterrows():
                self.outTable[i[0]] = i[-1]
            return self.outTable
        if data2 != None:
            maseeyRank = maseey.rank(data2)
            mergedRank = maseeyRank
            self.outTable = {}
            for index, i in mergedRank.iterrows():
                self.outTable[i[0]] = i[-1]
            return self.outTable

        if data != None:
            keenerRank = keener.rank(data)
            mergedRank = keenerRank
            self.outTable = {}
            for index, i in mergedRank.iterrows():
                self.outTable[i[0]] = i[-1]
            return self.outTable

        return {}
Beispiel #19
0
 def __init__(self,
              baseline=1500,
              rd=500,
              performanceRd=250,
              drawProbability=0.1,
              drawMargin=0):
     self.miu = baseline / rd
     self.sigma = 1
     self.baseline = baseline
     self.rd = rd
     self.performanceRd = performanceRd
     self.drawMargin = drawMargin
     self.drawProbability = drawProbability
     self.data = Table()
     self.indexMiuLut = []
     self.indexSigmaSqrLut = []
Beispiel #20
0
def trueskill_test():
    tsRanker = TrueSkillRanker(baseline=25,
                               rd=25 / 3.0,
                               performanceRd=25 / 6.0)
    df = pd.DataFrame(
        {
            'host': ['Alice'],
            'visit': ['Bob'],
            'hscore': [1],
            'vscore': [1]
        },
        columns=['host', 'visit', 'hscore', 'vscore'])
    t = Table(df, col=['host', 'visit', 'hscore', 'vscore'])
    tsRanker.update(t)
    assert_array_almost_equal(np.array(
        [tsRanker.rd * j**(1 / 2.0) for j in tsRanker.indexSigmaSqrLut]),
                              np.array([6.458, 6.458]),
                              decimal=3)
Beispiel #21
0
    def __init__(self,
                 baseline=1500,
                 rd=350,
                 votality=0.06,
                 tau=0.5,
                 epsilon=0.000001,
                 drawMargin=0):
        self.baseline = baseline
        self.rd = rd
        self.votality = votality
        self.tau = tau
        self.epsilon = epsilon
        self.drawMargin = drawMargin
        self.data = Table()
        self.miu = []  # normalized rating
        self.phi = []  # normalized rd
        self.sigma = []  # votality

        self.factor = 400 / math.log(10)
Beispiel #22
0
def difference_rank_test():
    data = Table(sample_paired, col=[0,1,2,3])
    r = DifferenceRanker()
    rst = r.rank(data)
Beispiel #23
0
def od_rank_test():
    data = Table(sample_paired, col=[0,1,2,3])
    r1 = ODRanker(method='summary')
    rst = r1.rank(data)
    r2 = ODRanker(method='defence')
    rst = r2.rank(data)
Beispiel #24
0
def markov_rank_test():
    data = Table(sample_paired, col=[0,1,2,3])
    r = MarkovRanker()
    rst = r.rank(data)
Beispiel #25
0
def keener_rank_test():
    data = Table(sample_paired, col=[0,1,2,3])
    r = KeenerRanker()
    rst = r.rank(data)
Beispiel #26
0
def keener_rank_test():
    data = Table(sample_paired, col=[0, 1, 2, 3])
    r = KeenerRanker(table=data)
    rst = r.rank(ascending=False)
    print('Keener rank:')
    print(rst)
Beispiel #27
0
def markov_rank_test():
    data = Table(sample_paired, col=[0, 1, 2, 3])
    r = MarkovRanker(table=data)
    rst = r.rank(ascending=False)
    print('Markov rank:')
    print(rst)
Beispiel #28
0
def difference_rank_test():
    data = Table(sample_paired, col=[0, 1, 2, 3])
    r = DifferenceRanker(table=data)
    rst = r.rank(ascending=False)
    print('Difference rank:')
    print(rst)
Beispiel #29
0
def elo_rank_test():
    data = Table(sample_with_time_1,
                 col=['primary', 'secondary', 'rate1', 'rate2'],
                 timecol='date')
    ranker = EloRanker(data)
    ranker.rank(ascending=False)