tsadmetrics 0.1.9__py3-none-any.whl → 0.1.11__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- docs/conf.py +43 -0
- tests/test_binary.py +6 -6
- tests/test_non_binary.py +2 -2
- tsadmetrics/binary_metrics.py +375 -60
- tsadmetrics/metric_utils.py +18 -5
- tsadmetrics/non_binary_metrics.py +278 -28
- tsadmetrics/utils.py +1 -1
- {tsadmetrics-0.1.9.dist-info → tsadmetrics-0.1.11.dist-info}/METADATA +1 -1
- {tsadmetrics-0.1.9.dist-info → tsadmetrics-0.1.11.dist-info}/RECORD +11 -10
- {tsadmetrics-0.1.9.dist-info → tsadmetrics-0.1.11.dist-info}/top_level.txt +1 -0
- {tsadmetrics-0.1.9.dist-info → tsadmetrics-0.1.11.dist-info}/WHEEL +0 -0
tsadmetrics/metric_utils.py
CHANGED
@@ -262,16 +262,29 @@ def transform_to_full_series(length: int, anomalies: np.array):
|
|
262
262
|
|
263
263
|
def counting_method(y_true: np.array, y_pred: np.array, k: int):
|
264
264
|
em,da,ma,fa = 0,0,0,0
|
265
|
-
for
|
265
|
+
for i_gt in range(len(y_true)):
|
266
|
+
i_pa = i_gt
|
267
|
+
gt = y_true[i_gt]
|
268
|
+
pa = y_pred[i_pa]
|
266
269
|
if gt==1 and pa==1:
|
267
270
|
em+=1
|
268
271
|
elif gt==0 and pa==1:
|
269
272
|
fa+=1
|
270
|
-
|
273
|
+
elif gt==1 and pa==0:
|
274
|
+
anom_range = y_pred[i_gt-k:i_pa+k+1]
|
275
|
+
detected = False
|
276
|
+
for r in anom_range:
|
277
|
+
if r==1:
|
278
|
+
em+=1
|
279
|
+
detected=True
|
280
|
+
break
|
281
|
+
if not detected:
|
282
|
+
ma+=1
|
283
|
+
elif gt==0 and pa==0:
|
271
284
|
pass
|
272
|
-
b = DelayThresholdedPointAdjust(len(y_true),y_true,y_pred,k=k)
|
273
|
-
da = b.tp-em
|
274
|
-
ma = b.fn
|
285
|
+
# b = DelayThresholdedPointAdjust(len(y_true),y_true,y_pred,k=k)
|
286
|
+
# da = b.tp-em
|
287
|
+
# ma = b.fn
|
275
288
|
|
276
289
|
return em,da,ma,fa
|
277
290
|
|
@@ -1,16 +1,42 @@
|
|
1
1
|
import numpy as np
|
2
2
|
from ._tsadeval.metrics import *
|
3
|
-
from .metric_utils import transform_to_full_series
|
4
3
|
from sklearn.metrics import auc
|
5
|
-
from .binary_metrics import point_adjusted_precision, point_adjusted_recall, segment_wise_precision, segment_wise_recall
|
6
4
|
from pate.PATE_metric import PATE
|
7
|
-
def precision_at_k(y_true : np.array
|
8
|
-
|
5
|
+
def precision_at_k(y_true : np.array, y_anomaly_scores: np.array):
|
6
|
+
"""
|
7
|
+
Calculate the precision at k score for anomaly detection in time series.
|
8
|
+
|
9
|
+
This metric evaluates how many of the top-k points (with highest anomaly scores)
|
10
|
+
actually correspond to true anomalies. It is particularly useful when we are
|
11
|
+
interested in identifying the most anomalous points, without needing to set a
|
12
|
+
fixed threshold.
|
13
|
+
|
14
|
+
The value of k is automatically set to the number of true anomalies present in
|
15
|
+
y_true. That is, k = sum(y_true).
|
16
|
+
|
17
|
+
Parameters:
|
18
|
+
y_true (np.array): The ground truth binary labels for the time series data.
|
19
|
+
y_anomaly_scores (np.array): The predicted anomaly scores for the time series data.
|
20
|
+
"""
|
9
21
|
m = PatK_pw(y_true,y_anomaly_scores)
|
10
22
|
|
11
23
|
return m.get_score()
|
12
24
|
|
13
|
-
def auc_roc_pw(y_true : np.array
|
25
|
+
def auc_roc_pw(y_true : np.array, y_anomaly_scores: np.array):
|
26
|
+
"""
|
27
|
+
Calculate the AUC-ROC score for anomaly detection in time series.
|
28
|
+
|
29
|
+
This is the standard Area Under the Receiver Operating Characteristic Curve (AUC-ROC),
|
30
|
+
computed in a point-wise manner. That is, each point in the time series is treated
|
31
|
+
independently when calculating true positives, false positives, and false negatives.
|
32
|
+
|
33
|
+
Parameters:
|
34
|
+
y_true (np.array): Ground-truth binary labels for the time series (0 = normal, 1 = anomaly).
|
35
|
+
y_anomaly_scores (np.array): Continuous anomaly scores assigned to each point in the series.
|
36
|
+
|
37
|
+
Returns:
|
38
|
+
float: AUC-ROC score.
|
39
|
+
"""
|
14
40
|
|
15
41
|
m = AUC_ROC(y_true,y_anomaly_scores)
|
16
42
|
|
@@ -18,7 +44,20 @@ def auc_roc_pw(y_true : np.array ,y_anomaly_scores: np.array):
|
|
18
44
|
|
19
45
|
|
20
46
|
def auc_pr_pw(y_true : np.array ,y_anomaly_scores: np.array):
|
21
|
-
|
47
|
+
"""
|
48
|
+
Calculate the AUC-PR score for anomaly detection in time series.
|
49
|
+
|
50
|
+
This is the standard Area Under the Precision-Recall Curve (AUC-PR),
|
51
|
+
computed in a point-wise manner. That is, each point in the time series is treated
|
52
|
+
independently when calculating precision and recall.
|
53
|
+
|
54
|
+
Parameters:
|
55
|
+
y_true (np.array): Ground-truth binary labels for the time series (0 = normal, 1 = anomaly).
|
56
|
+
y_anomaly_scores (np.array): Continuous anomaly scores assigned to each point in the series.
|
57
|
+
|
58
|
+
Returns:
|
59
|
+
float: AUC-PR score.
|
60
|
+
"""
|
22
61
|
m = AUC_PR_pw(y_true,y_anomaly_scores)
|
23
62
|
|
24
63
|
return m.get_score()
|
@@ -26,19 +65,88 @@ def auc_pr_pw(y_true : np.array ,y_anomaly_scores: np.array):
|
|
26
65
|
|
27
66
|
|
28
67
|
def auc_pr_pa(y_true: np.array, y_anomaly_scores: np.array):
|
29
|
-
|
68
|
+
"""
|
69
|
+
Calculate the AUC-PR score using point-adjusted evaluation for anomaly detection in time series.
|
70
|
+
|
71
|
+
This is the standard Area Under the Precision-Recall Curve (AUC-PR), but instead of computing
|
72
|
+
precision and recall point-wise, it uses a point-adjusted approach. Specifically, for each
|
73
|
+
ground-truth anomalous segment, if at least one point within that segment is predicted as anomalous,
|
74
|
+
the entire segment is considered correctly detected. The adjusted predictions are then compared
|
75
|
+
to the ground-truth labels to compute true positives, false positives, and false negatives,
|
76
|
+
which are used to construct the PR curve.
|
77
|
+
|
78
|
+
Parameters:
|
79
|
+
y_true (np.array): Ground-truth binary labels for the time series (0 = normal, 1 = anomaly).
|
80
|
+
y_anomaly_scores (np.array): Continuous anomaly scores assigned to each point in the series.
|
81
|
+
|
82
|
+
Returns:
|
83
|
+
float: AUC-PR score (with point-adjusted evaluation).
|
84
|
+
"""
|
85
|
+
|
86
|
+
|
30
87
|
precisions = [1]
|
31
88
|
recalls = [0]
|
32
|
-
|
89
|
+
tps,fps,fns = [],[],[]
|
90
|
+
|
91
|
+
p_adj = PointAdjust(len(y_true),y_true,(np.array(y_anomaly_scores) >= 0.5).astype(int))
|
92
|
+
segments= p_adj.get_gt_anomalies_segmentwise()
|
93
|
+
idx = np.argsort(y_anomaly_scores)[::-1].astype(int)
|
94
|
+
y_true_sorted = np.array(y_true)[idx]
|
95
|
+
y_anomaly_scores_sorted = np.array(y_anomaly_scores)[idx]
|
96
|
+
|
97
|
+
segment_mins = []
|
98
|
+
for start,end in segments:
|
99
|
+
anoms_scores = y_anomaly_scores[start:end+1]
|
100
|
+
segment_mins.append([np.max(anoms_scores),end-start+1])
|
33
101
|
|
34
|
-
|
102
|
+
for i_t in range(len(y_anomaly_scores_sorted)):
|
103
|
+
fp,tp,fn = 0,0,0
|
104
|
+
if i_t > 0 and y_anomaly_scores_sorted[i_t] == y_anomaly_scores_sorted[i_t-1] :
|
105
|
+
tp = tps[-1]
|
106
|
+
fp = fps[-1]
|
107
|
+
fn = fns[-1]
|
108
|
+
else:
|
109
|
+
if y_true_sorted[i_t] == 0:
|
110
|
+
#FP
|
111
|
+
if len(fps)==0:
|
112
|
+
aux_y_pred = (y_anomaly_scores >= y_anomaly_scores_sorted[i_t]).astype(int)
|
113
|
+
for i in range(len(aux_y_pred)):
|
114
|
+
if aux_y_pred[i] == 1 and y_true[i] == 0:
|
115
|
+
fp+=1
|
35
116
|
|
36
117
|
|
37
|
-
|
38
|
-
|
118
|
+
else:
|
119
|
+
fp=fps[i_t-1]+1
|
120
|
+
else:
|
121
|
+
if len(fps)==0:
|
122
|
+
aux_y_pred = (y_anomaly_scores >= y_anomaly_scores_sorted[i_t]).astype(int)
|
123
|
+
for i in range(len(aux_y_pred)):
|
124
|
+
if aux_y_pred[i] == 1 and y_true[i] == 0:
|
125
|
+
fp+=1
|
126
|
+
else:
|
127
|
+
fp=fps[i_t-1]
|
128
|
+
for score, length in segment_mins:
|
129
|
+
if score >= y_anomaly_scores_sorted[i_t]:
|
130
|
+
#TP
|
131
|
+
tp+= length
|
132
|
+
else:
|
133
|
+
#FN
|
134
|
+
fn+= length
|
135
|
+
tps.append(tp)
|
136
|
+
fns.append(fn)
|
137
|
+
fps.append(fp)
|
138
|
+
for tp,fp,fn in zip(tps,fps,fns):
|
139
|
+
if tp>0:
|
140
|
+
precisions.append(tp/(tp+fp))
|
141
|
+
recalls.append(tp/(tp+fn))
|
142
|
+
else:
|
143
|
+
precisions.append(0)
|
144
|
+
recalls.append(0)
|
145
|
+
|
39
146
|
|
40
147
|
recalls.append(1)
|
41
148
|
precisions.append(0)
|
149
|
+
|
42
150
|
auc_value = auc(recalls, precisions)
|
43
151
|
return auc_value
|
44
152
|
|
@@ -46,29 +154,159 @@ def auc_pr_pa(y_true: np.array, y_anomaly_scores: np.array):
|
|
46
154
|
|
47
155
|
|
48
156
|
def auc_pr_sw(y_true: np.array, y_anomaly_scores: np.array):
|
49
|
-
|
157
|
+
"""
|
158
|
+
Calculate the AUC-PR score using segment-wise evaluation for anomaly detection in time series.
|
159
|
+
|
160
|
+
This is the standard Area Under the Precision-Recall Curve (AUC-PR), but it uses a segment-wise
|
161
|
+
adjustment when computing precision and recall. In this evaluation, each contiguous segment of
|
162
|
+
anomalous ground-truth points is treated as a single unit. A true positive is counted if at least
|
163
|
+
one predicted anomaly overlaps with the segment. A false negative occurs when a segment is
|
164
|
+
completely missed, and a false positive is recorded for each predicted anomalous segment
|
165
|
+
that does not overlap with any ground-truth anomaly. These adjusted counts are then used
|
166
|
+
to compute precision and recall for constructing the PR curve.
|
167
|
+
|
168
|
+
Parameters:
|
169
|
+
y_true (np.array): Ground-truth binary labels for the time series (0 = normal, 1 = anomaly).
|
170
|
+
y_anomaly_scores (np.array): Continuous anomaly scores assigned to each point in the series.
|
171
|
+
|
172
|
+
Returns:
|
173
|
+
float: AUC-PR score (with segment-wise evaluation).
|
174
|
+
"""
|
175
|
+
|
50
176
|
precisions = [1]
|
51
177
|
recalls = [0]
|
178
|
+
tps,fps,fns = [],[],[]
|
179
|
+
|
180
|
+
|
181
|
+
segments = []
|
182
|
+
i=0
|
183
|
+
while i < len(y_true):
|
184
|
+
if y_true[i] == 1:
|
185
|
+
start = i
|
186
|
+
end = i
|
187
|
+
while i < len(y_true) and y_true[i] == 1:
|
188
|
+
end = i
|
189
|
+
i += 1
|
190
|
+
segments.append([start,end])
|
191
|
+
i+=1
|
192
|
+
idx = np.argsort(y_anomaly_scores)[::-1].astype(int)
|
193
|
+
y_anomaly_scores_sorted = np.array(y_anomaly_scores)[idx]
|
52
194
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
195
|
+
segment_mins = []
|
196
|
+
for start,end in segments:
|
197
|
+
anoms_scores = y_anomaly_scores[start:end+1]
|
198
|
+
segment_mins.append([np.max(anoms_scores),[start,end]])
|
199
|
+
|
200
|
+
for i_t in range(len(y_anomaly_scores_sorted)):
|
201
|
+
fp,tp,fn = 0,0,0
|
202
|
+
|
203
|
+
|
204
|
+
aux_y_pred = (y_anomaly_scores >= y_anomaly_scores_sorted[i_t]).astype(int)
|
205
|
+
for score,seg in segment_mins:
|
206
|
+
start,end = seg
|
207
|
+
if score >= y_anomaly_scores_sorted[i_t]:
|
208
|
+
#TP
|
209
|
+
tp+= 1
|
210
|
+
if aux_y_pred[start]== 1:
|
211
|
+
# Extender hacia la izquierda
|
212
|
+
i = start - 1
|
213
|
+
while i >= 0 and aux_y_pred[i] == 1:
|
214
|
+
aux_y_pred[i] = 0
|
215
|
+
i -= 1
|
216
|
+
|
217
|
+
if aux_y_pred[end] == 1:
|
218
|
+
# Extender hacia la derecha
|
219
|
+
i = end + 1
|
220
|
+
while i < len(aux_y_pred) and aux_y_pred[i] == 1:
|
221
|
+
aux_y_pred[i] = 0
|
222
|
+
i += 1
|
223
|
+
aux_y_pred[start:end+1] = 0
|
224
|
+
|
225
|
+
else:
|
226
|
+
#FN
|
227
|
+
fn+= 1
|
228
|
+
|
229
|
+
if np.sum(aux_y_pred)>0:
|
230
|
+
fpsegments = []
|
231
|
+
i=0
|
232
|
+
while i < len(aux_y_pred):
|
233
|
+
if aux_y_pred[i] == 1:
|
234
|
+
start = i
|
235
|
+
end = i
|
236
|
+
while i < len(aux_y_pred) and aux_y_pred[i] == 1:
|
237
|
+
end = i
|
238
|
+
i += 1
|
239
|
+
fpsegments.append([start,end])
|
240
|
+
i+=1
|
241
|
+
fp = len(fpsegments)
|
242
|
+
else:
|
243
|
+
fp = 0
|
244
|
+
|
245
|
+
|
246
|
+
tps.append(tp)
|
247
|
+
fns.append(fn)
|
248
|
+
fps.append(fp)
|
249
|
+
for tp,fp,fn in zip(tps,fps,fns):
|
250
|
+
if tp>0:
|
251
|
+
precisions.append(tp/(tp+fp))
|
252
|
+
recalls.append(tp/(tp+fn))
|
253
|
+
else:
|
254
|
+
precisions.append(0)
|
255
|
+
recalls.append(0)
|
256
|
+
|
257
|
+
|
258
|
+
|
59
259
|
auc_value = auc(recalls, precisions)
|
260
|
+
|
60
261
|
return auc_value
|
61
262
|
|
62
263
|
|
63
264
|
def vus_roc(y_true : np.array ,y_anomaly_scores: np.array, window=4):
|
64
|
-
|
265
|
+
"""
|
266
|
+
Calculate the VUS-ROC (Volume Under the ROC Surface) score for anomaly detection in time series.
|
267
|
+
|
268
|
+
This metric extends the classical AUC-ROC by introducing a temporal tolerance parameter `l`, which
|
269
|
+
smooths the binary ground-truth labels. The idea is to allow a flexible evaluation that tolerates
|
270
|
+
small misalignments in the detection of anomalies. The final score is computed by integrating
|
271
|
+
the ROC-AUC over different values of the tolerance parameter, from 0 to `window`, thus producing
|
272
|
+
a volume under the ROC surface.
|
273
|
+
|
274
|
+
Parameters:
|
275
|
+
y_true (np.array): Ground-truth binary labels (0 = normal, 1 = anomaly).
|
276
|
+
y_anomaly_scores (np.array): Anomaly scores for each time point.
|
277
|
+
window (int): Maximum temporal tolerance `l` used to smooth the evaluation.
|
278
|
+
|
279
|
+
Returns:
|
280
|
+
float: VUS-ROC score.
|
281
|
+
|
282
|
+
For more information, see the original paper:
|
283
|
+
https://dl.acm.org/doi/10.14778/3551793.3551830
|
284
|
+
"""
|
65
285
|
m = VUS_ROC(y_true,y_anomaly_scores,max_window=window)
|
66
286
|
|
67
287
|
return m.get_score()
|
68
288
|
|
69
289
|
|
70
290
|
def vus_pr(y_true : np.array ,y_anomaly_scores: np.array, window=4):
|
71
|
-
|
291
|
+
"""
|
292
|
+
Calculate the VUS-PR (Volume Under the PR Surface) score for anomaly detection in time series.
|
293
|
+
|
294
|
+
This metric is an extension of the classical AUC-PR, incorporating a temporal tolerance parameter `l`
|
295
|
+
that smooths the binary ground-truth labels. It allows for some flexibility in the detection of
|
296
|
+
anomalies that are temporally close to the true events. The final metric integrates the PR-AUC
|
297
|
+
over several levels of temporal tolerance (from 0 to `window`), yielding a volume under the PR surface.
|
298
|
+
|
299
|
+
Parameters:
|
300
|
+
y_true (np.array): Ground-truth binary labels (0 = normal, 1 = anomaly).
|
301
|
+
y_anomaly_scores (np.array): Anomaly scores for each time point.
|
302
|
+
window (int): Maximum temporal tolerance `l` used to smooth the evaluation.
|
303
|
+
|
304
|
+
Returns:
|
305
|
+
float: VUS-PR score.
|
306
|
+
|
307
|
+
For more information, see the original paper:
|
308
|
+
https://dl.acm.org/doi/10.14778/3551793.3551830
|
309
|
+
"""
|
72
310
|
m = VUS_PR(y_true,y_anomaly_scores,max_window=window)
|
73
311
|
|
74
312
|
return m.get_score()
|
@@ -76,17 +314,29 @@ def vus_pr(y_true : np.array ,y_anomaly_scores: np.array, window=4):
|
|
76
314
|
|
77
315
|
def real_pate(y_true: np.array, y_anomaly_scores: np.array, early: int, delay: int):
|
78
316
|
"""
|
79
|
-
Calculate PATE score for anomaly detection in time series.
|
80
|
-
|
317
|
+
Calculate PATE score for anomaly detection in time series using real-valued anomaly scores.
|
318
|
+
|
319
|
+
This version of PATE evaluates real-valued anomaly scores by assigning weights to predictions
|
320
|
+
based on their temporal proximity to the true anomaly intervals. It defines an early buffer of
|
321
|
+
length `early` before each anomaly and a delay buffer of length `delay` after it. Detections with
|
322
|
+
high scores within the anomaly interval receive full weight, while those in the buffer zones are
|
323
|
+
assigned linearly decaying weights depending on their distance from the interval. Scores outside
|
324
|
+
these zones contribute to false positives, and intervals with insufficient detection are penalized
|
325
|
+
as false negatives.
|
326
|
+
|
327
|
+
The final PATE score aggregates these weighted contributions across all time steps, yielding
|
328
|
+
a smooth performance measure that is sensitive to both the timing and confidence of the predictions.
|
329
|
+
|
330
|
+
For more information, see the original paper:
|
331
|
+
https://arxiv.org/abs/2405.12096
|
81
332
|
|
82
333
|
Parameters:
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
334
|
+
y_true (np.array): Ground truth binary labels (0 = normal, 1 = anomaly).
|
335
|
+
y_anomaly_scores (np.array): Real-valued anomaly scores for each time point.
|
336
|
+
early (int): Length of the early buffer zone before each anomaly interval.
|
337
|
+
delay (int): Length of the delay buffer zone after each anomaly interval.
|
87
338
|
|
88
339
|
Returns:
|
89
|
-
|
340
|
+
float: The real-valued PATE score.
|
90
341
|
"""
|
91
|
-
|
92
342
|
return PATE(y_true, y_anomaly_scores, early, delay, binary_scores=False)
|
tsadmetrics/utils.py
CHANGED
@@ -2,7 +2,7 @@ import numpy as np
|
|
2
2
|
import pandas as pd
|
3
3
|
import time
|
4
4
|
|
5
|
-
def compute_metrics(y_true: np.array,y_pred: np.array,metrics: list, metrics_params: dict, is_anomaly_score = False, verbose = False):
|
5
|
+
def compute_metrics(y_true: np.array,y_pred: np.array, metrics: list, metrics_params: dict, is_anomaly_score = False, verbose = False):
|
6
6
|
"""
|
7
7
|
Computes the specified metrics for the given true and predicted values.
|
8
8
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: tsadmetrics
|
3
|
-
Version: 0.1.
|
3
|
+
Version: 0.1.11
|
4
4
|
Summary: =?unknown-8bit?q?Librer=C3=ADa_para_evaluaci=C3=B3n_de_detecci=C3=B3n_de_anomal=C3=ADas?= en series temporales
|
5
5
|
Home-page: https://github.com/pathsko/TSADmetrics
|
6
6
|
Author: Pedro Rafael Velasco Priego
|
@@ -1,3 +1,4 @@
|
|
1
|
+
docs/conf.py,sha256=skVqctOiByesc7wNDW5DpjyTxUCP0wxlpWA1fsJYZhk,1384
|
1
2
|
entorno/bin/activate_this.py,sha256=45dnJsdtOWIt5LtVSBmBfB8E7AlKcnhnZe9e3WGclak,1199
|
2
3
|
entorno/bin/rst2html.py,sha256=h4RydG-iAectsUra0lNFGwB4_1mngxrtPPgQrxUWQ3A,643
|
3
4
|
entorno/bin/rst2html4.py,sha256=Xiv3Zb1gk4jT7DYFVlf5w4LJtI5ZI3pW3b1KLxyPS5A,765
|
@@ -12,14 +13,14 @@ entorno/bin/rst2xetex.py,sha256=spisB81JgqAmMAkjdTaP8awFQS_Zuob9HIcbMi1kOS8,922
|
|
12
13
|
entorno/bin/rst2xml.py,sha256=uoIfpn3prnir2tzqdycsAjOg-OWw663XOK47IeHCZdY,651
|
13
14
|
entorno/bin/rstpep2html.py,sha256=sthYQHEgYfj4JqwG45URwVbRAs-HYuwKget7SUwp9fc,719
|
14
15
|
tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
15
|
-
tests/test_binary.py,sha256=
|
16
|
-
tests/test_non_binary.py,sha256=
|
16
|
+
tests/test_binary.py,sha256=dj9BsKBo5rpWw4JGiKKoVkg4rIW4YylTie2VxH2DAGo,29787
|
17
|
+
tests/test_non_binary.py,sha256=syANlwm0DKsL6geGeq6nQI6ZVe6T_YXWTyk2-Hmck4s,11308
|
17
18
|
tsadmetrics/__init__.py,sha256=MTWOa43fgOdkMNo5NglCReRnB8hoF0ob2PIvDziCNHw,1575
|
18
|
-
tsadmetrics/binary_metrics.py,sha256=
|
19
|
-
tsadmetrics/metric_utils.py,sha256=
|
20
|
-
tsadmetrics/non_binary_metrics.py,sha256=
|
19
|
+
tsadmetrics/binary_metrics.py,sha256=pEIe8s3_obGN1hHhfvQwg0BXKafs4lQ3l1-K03P3Ews,60067
|
20
|
+
tsadmetrics/metric_utils.py,sha256=fm8v0X37_AlqWpkcUT9r3680QsjLljrHe2YuXkRLAZ4,10873
|
21
|
+
tsadmetrics/non_binary_metrics.py,sha256=yo620BWZIq-OkBqQV7t7ynjGhcuX6QWQ6iq_7eJq9gI,13074
|
21
22
|
tsadmetrics/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
22
|
-
tsadmetrics/utils.py,sha256=
|
23
|
+
tsadmetrics/utils.py,sha256=15X_RkHdCxhu_-OH8fEm3gRVQ4tTMqCkNaQsQoloEYQ,2361
|
23
24
|
tsadmetrics/_tsadeval/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
24
25
|
tsadmetrics/_tsadeval/auc_roc_pr_plot.py,sha256=PHqJUXq2qI248XV9o04D8SsUJgowetaKq0Cu5bYrIAE,12689
|
25
26
|
tsadmetrics/_tsadeval/discontinuity_graph.py,sha256=Ci65l_DPi6HTtb8NvQJe1najgGrRuEpOMWvSyi2AeR0,4088
|
@@ -52,7 +53,7 @@ tsadmetrics/_tsadeval/prts/time_series_metrics/fscore.py,sha256=pJz4iuPyVGNvwsaR
|
|
52
53
|
tsadmetrics/_tsadeval/prts/time_series_metrics/precision.py,sha256=jLkcMg7UNl25SHtZUBGkP-RV8HsvaZCtjakryl7PFWU,3204
|
53
54
|
tsadmetrics/_tsadeval/prts/time_series_metrics/precision_recall.py,sha256=OhUJSm_I7VZ_gX_SSg8AYUq3_NW9rMIy7lAVsnOFw4Q,417
|
54
55
|
tsadmetrics/_tsadeval/prts/time_series_metrics/recall.py,sha256=LL-0pPer3ymovVRlktaHo5XDzpgiDhWOVfdPOzKR6og,3152
|
55
|
-
tsadmetrics-0.1.
|
56
|
-
tsadmetrics-0.1.
|
57
|
-
tsadmetrics-0.1.
|
58
|
-
tsadmetrics-0.1.
|
56
|
+
tsadmetrics-0.1.11.dist-info/METADATA,sha256=JrsyLRUVbWIhrBkE56hn3ALYUycm3j52kSmmcq8TMhA,831
|
57
|
+
tsadmetrics-0.1.11.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
|
58
|
+
tsadmetrics-0.1.11.dist-info/top_level.txt,sha256=s2VIr_ePl-WZbYt9FsYbsDGM7J-Qc5cgpwEOeQ3FVpM,31
|
59
|
+
tsadmetrics-0.1.11.dist-info/RECORD,,
|
File without changes
|