package edu.uci.jforests.eval.ranking;
import edu.uci.jforests.eval.EvaluationMetric;
import edu.uci.jforests.util.CDF_Normal;
/** Implements the TRisk risk-sensitive optimisation metric called FARO, as defined by Dincer et al.
* See Taner Dincer, Craig Macdonald and Iadh Ounis, Hypothesis Testing for Risk-Sensitive Evaluation
* of Retrieval Systems, SIGIR 2014.
* Implementation Details
* It is assumed that the natural ordering of documents for each query defines
* the baseline.
* @author Craig Macdonald, University of Glasgow; Taner Dincer, Mugla University.
*/
public class TRiskAwareFAROEval extends TRiskAwareSAROEval {
public TRiskAwareFAROEval(EvaluationMetric _parent, double alpha) {
super(_parent, alpha);
}
class FAROSwapScorer extends SAROSwapScorer
{
public FAROSwapScorer(double[] targets, int[] boundaries, int trunc,
int[][] labelCounts, double _alpha, SwapScorer _parent) {
super(targets, boundaries, trunc, labelCounts, _alpha, _parent);
}
@Override
public double getDelta(int queryIndex, int betterIdx, int rank_i, int worseIdx, int rank_j)
{
//get the change in NDCG
final double delta_M = parentSwap.getDelta(queryIndex, betterIdx, rank_i, worseIdx, rank_j);
final double M_m = modelEval[queryIndex];
final double M_b = baselineEval[queryIndex];
// Score difference
double d_i = M_m - M_b;
final double TRisk = d_i / currPairedSTD;
// beta asymptotically ranges in between a value as small as 0 and a value as large as alpha,
// proportionally to the level of risk commited by the current topic.
// This version follows its own way of weighing a given delta.
// NB: in Dincer et al, beta is called \alpha'
final double beta = (1 - CDF_Normal.normp(TRisk)) * alpha;
final double delta_T = (1 + beta) * delta_M;
return delta_T;
}
}
@Override
public SwapScorer getSwapScorer(double[] targets, int[] boundaries,
int trunc, int[][] labelCounts) throws Exception
{
final SwapScorer parentMeasure = ((RankingEvaluationMetric) parent).getSwapScorer(targets, boundaries, trunc, labelCounts);
return new FAROSwapScorer(targets, boundaries, trunc, labelCounts,
ALPHA,
parentMeasure);
}
}
Ads help maintain this website.