18 using System.Collections.Generic;
22 using TraceLabSDK.Types;
23 using TraceLabSDK.Types.Contests;
25 namespace TraceLab.Components.DevelopmentKit.Metrics.Traceability
34 private const string _name =
"Average Precision (query granularity)";
35 private const string _description =
"Average precision measures average of the precision values for each correct link. This metric is calculated per query.";
40 public override string Name
48 public override string Description
50 get {
return _description; }
53 private TLSimilarityMatrix _matrix;
54 private TLSimilarityMatrix _oracle;
66 _matrix = candidateMatrix;
67 _oracle = answerMatrix;
75 Results =
new SerializableDictionary<string, double>();
76 foreach (
string sourceID
in _oracle.SourceArtifactsIds)
78 double sumOfPrecisions = 0.0;
81 TLLinksList links = _matrix.GetLinksAboveThresholdForSourceArtifact(sourceID);
83 foreach (TLSingleLink link
in links)
86 if (_oracle.IsLinkAboveThreshold(sourceID, link.TargetArtifactId))
89 sumOfPrecisions += correctSoFar / (double)currentLink;
92 Results.Add(sourceID, sumOfPrecisions / _oracle.GetCountOfLinksAboveThresholdForSourceArtifact(sourceID));
101 BoxSummaryData data =
new BoxSummaryData(Name, Description);
102 data.AddPoint(
new BoxPlotPoint(Results.Values.ToArray()));