Skip to content

Commit 8fe96a5

Browse files
committed
Fix K-Sigma default window size
1 parent 28919e9 commit 8fe96a5

2 files changed

Lines changed: 22 additions & 2 deletions

File tree

library-udf/src/main/java/org/apache/iotdb/library/anomaly/UDTFKSigma.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333

3434
/** This function detects outliers which lies over average +/- k * sigma. */
3535
public class UDTFKSigma implements UDTF {
36-
private static final int DEFAULT_WINDOW_SIZE = 10;
36+
private static final int DEFAULT_WINDOW_SIZE = 10000;
3737

3838
private double mean = 0.0;
3939
private double variance = 0.0;

library-udf/src/test/java/org/apache/iotdb/library/UDFWindowAndQueueTest.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ public void testKSigmaDefaultWindowIsConsistent() throws Exception {
117117
kSigma.validate(new UDFParameterValidator(parameters));
118118
kSigma.beforeStart(parameters, new UDTFConfigurations(ZoneId.systemDefault()));
119119

120-
Assert.assertEquals(10, getWindowSize(kSigma));
120+
Assert.assertEquals(10000, getWindowSize(kSigma));
121121
}
122122

123123
@Test
@@ -134,6 +134,26 @@ public void testKSigmaExplicitWindowOverridesDefault() throws Exception {
134134
Assert.assertEquals(3, getWindowSize(kSigma));
135135
}
136136

137+
@Test
138+
public void testKSigmaDefaultWindowMatchesAnomalyITExpectation() throws Exception {
139+
Map<String, String> attributes = new HashMap<>();
140+
attributes.put("k", "1.0");
141+
UDFParameters parameters = createSingleDoubleSeriesParameters(attributes);
142+
UDTFKSigma kSigma = new UDTFKSigma();
143+
RecordingPointCollector collector = new RecordingPointCollector();
144+
145+
kSigma.validate(new UDFParameterValidator(parameters));
146+
kSigma.beforeStart(parameters, new UDTFConfigurations(ZoneId.systemDefault()));
147+
double[] values = {0, 50, 100, 150, 200, 200, 200, 200, 200, 200, 150, 100, 50, 0};
148+
for (int i = 0; i < values.length; i++) {
149+
kSigma.transform(new DoubleRow((i + 1) * 100L, values[i]), collector);
150+
}
151+
kSigma.terminate(collector);
152+
153+
Assert.assertEquals(Arrays.asList(100L, 200L, 1300L, 1400L), collector.timestamps);
154+
Assert.assertEquals(Arrays.asList(0.0, 50.0, 50.0, 0.0), collector.values);
155+
}
156+
137157
@Test
138158
public void testMvAvgUsesRunningWindowSum() throws Exception {
139159
Map<String, String> attributes = new HashMap<>();

0 commit comments

Comments
 (0)