blob: a0d685333a8376104b3485902771f5b820fd1116 [file] [log] [blame] [view]
---
layout: doc_page
---
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
# ReqSketch Accuracy with Random Shuffled Streams
This set of tests characterize the accuracy (or more precisely the rank error) of the ReqSketch using random shuffled streams. The goal of this suite of tests is to understand how the rank error of the sketch behaves across all ranks. All of these tests are run with the same stream length. The two major parameters that are varied are the sketch's *K*, which affects size and accuracy of the sketch, and the *HRA / LRA* parameter, which selects the region of highest accuracy is the high ranks close to 1.0 *High Ranks Accuracy (HRA)*, or the low ranks close to zero *Low Ranks Accuracy (LRA)*.
These tests also confirm that the a priori prediction of the error bounds are reasonable and relatively conservative. The computation of these bounds are based on empirical measurements derived from tests such as these and are subject to some tuning as we understand the sketch's error behavior over a wider selection of streams.
For those that are interested in the actual code that run these tests can examine the following links.
* [Code](https://github.com/apache/incubator-datasketches-characterization/blob/master/src/test/java/org/apache/datasketches/characterization/quantiles/ReqSketchAccuracyProfile.java): The code used to generate these characterization studies.
* [Config](https://github.com/apache/incubator-datasketches-characterization/blob/master/src/main/resources/quantiles/ReqSketchAccuracyJob.conf): The human readable and editable configuration file that instructs the above code with the specific properties used to run the test. These configuration properties are different for each of the following plots and summarized below with each plot.
## Test Design
* Stream Length (SL): 2^20
* Stream Values: Natural numbers, &#x2115;<sub>1</sub>, from 1 to SL, expressed as 32-bit floats.
* Y-axis: The absolute error of the sketch *getRank(value)* method.
* X-axis: The normalized rank [0.0, 1.0]
* Plot Points (PP): 100. Equally spaced points along the X-axis starting at 0.0 and ending at 1.0.
* Trial:
* Randomly Shuffles the input stream and presents it to the sketch.
* Execute *estRanks[] = getRanks(trueValues[])* from the sketch where the array of *trueValues[]* are the 100 equally spaced values along the x-axis that exactly correspond to the above Plot Points. The *estRanks[]* is the array of the sketch's estimates of the ranks of the given *trueValues*.
* Computes the absolute error: *estRanks[i] - trueRanks[i]* for each Plot Point and submits this error to a corresponding array of standard qantile sketches, with one quantile sketch assigned to each Plot Point.
* Trials:
* 2^12 trials are executed. This produces a distribution of error at each Plot Point held by the error quantile skeches.
* **Note:** With these tests randomization is due to two sources, the shuffling of the stream and the internal random process of the sketch itself.
* Extract 7 quantiles from the error quantile sketches at each Plot Point. These error quantiles correspond to the standard normal distribuion at the median, +/- 1SD, +/- 2SD and +/- 3SD, where SD stands for Standard Deviation from the mean.
* Plotting:
* Each of the error quantiles are connected by lines to form contours of the error distribution where the area between the +/- 1SD contours is the size of the 68% confidence interval; between the +/- 2SD coutours is the 95.4% confidence interval; and between the +/- 3SD contours is the 99.7% confidence interval.
* In addition to the error contours. 6 dashed contours (with colors corresponding to the error contours) represent the a priori estimates of the error at each of the +/- standard deviations computed from the sketch's *getRankLowerBound(double, int)* and *getRankUpperBound(double, int)* methods.
### Common Configuration for the following plots
* SL=2^20: StreamLength
* Eq Spaced: Equally spaced Plot Points (PP)
* PP=100: Number of plot points on the x-axis
* LgT=12: Number of trials = 2^12
* Shuffled: Random shuffle of the input stream for each trial
# Results
## Plot 1: K=12, HRA, LT
### Specific Configuration
* K=12: the sketch sizing & accuracy parameter
* HRA: High Rank Accuracy
* Crit=LT: Comparison criterion: LT = Less-Than
<img class="doc-img-full" src="{{site.docs_img_dir}}/req/ReqErrEqHraK12SL20T12_LT_Sh.png" alt="/req/ReqErrEqHraK50SL20T12_LT_Sh.png" />
* Retained Items: 2015
* Serialization Bytes: 8676
* Run Time: 14:01
* Unique Error Value Count Per Plot Point: Min=459, Max=3055
## Plot 2: K=12, LRA, LE
### Specific Configuration
* K=12: the sketch sizing & accuracy parameter
* LRA: Low Rank Accuracy
* Crit=LE: Comparison criterion: LE = Less-Than or Equal
<img class="doc-img-full" src="{{site.docs_img_dir}}/req/ReqErrEqLraK12SL20T12_LE_Sh.png" alt="/req/ReqErrEqLraK50SL20T12_LE_Sh.png" />
* Retained Items: 2015
* Serialization Bytes: 8676
* Run Time: 14:52
* Unique Error Value Count Per Plot Point: Min=447, Max=3106
## Plot 1 and 2, Final Compactor Profile & Size
Because these two tests are run with the same exact sketch configuration and the same input stream length they both have the same final compactor profile, retained items and Serialization Bytes.
| Lg Wt | Items | Nominal Size | Section Size | Num Sections | Num Compactions |
|:-----:|:-----:|:------------:|:------------:|:------------:|:---------------:|
| 0 | 192 | 192 | 4 | 24 | 85812 |
| 1 | 188 | 192 | 4 | 24 | 36251 |
| 2 | 184 | 192 | 4 | 24 | 16596 |
| 3 | 205 | 192 | 4 | 24 | 7509 |
| 4 | 188 | 192 | 4 | 24 | 3185 |
| 5 | 140 | 144 | 6 | 12 | 1340 |
| 6 | 173 | 144 | 6 | 12 | 590 |
| 7 | 138 | 144 | 6 | 12 | 261 |
| 8 | 187 | 144 | 6 | 12 | 108 |
| 9 | 138 | 144 | 6 | 12 | 35 |
| 10 | 94 | 96 | 8 | 6 | 13 |
| 11 | 36 | 96 | 8 | 6 | 4 |
| 12 | 128 | 72 | 12 | 3 | 1 |
| 13 | 24 | 72 | 12 | 3 | 0 |
* Retained Items: 2015
* Serialization Bytes: 8676
## Plot 3: K=50, HRA, LT
### Specific Configuration
* K=50: the sketch sizing & accuracy parameter
* HRA: High Rank Accuracy
* Crit=LT: Comparison criterion: LT = Less-Than
<img class="doc-img-full" src="{{site.docs_img_dir}}/req/ReqErrEqHraK50SL20T12_LT_Sh.png" alt="/req/ReqErrEqHraK50SL20T12_LT_Sh.png" />
* Retained Items: 6903
* Serialization Bytes: 28144
* Run Time: 8:38
* Unique Error Value Count Per Plot Point: Min=156, Max=2465
## Plot 4: K=50, LRA, LE
### Specific Configuration
* K=50: the sketch sizing & accuracy parameter
* LRA: Low Rank Accuracy
* Crit=LE: Comparison criterion: LE = Less-Than or Equal
<img class="doc-img-full" src="{{site.docs_img_dir}}/req/ReqErrEqLraK50SL20T12_LE_Sh.png" alt="/req/ReqErrEqLraK50SL20T12_LE_Sh.png" />
* Retained Items: 6903
* Serialization Bytes: 28144
* Run Time: 27:20
* Unique Error Value Count Per Plot Point: Min=167, Max=2475
## Plot 3 and 4, Final Compactor Profile & Size
Because these two tests are run with the same exact sketch configuration and the same input stream length they both have the same final compactor profile, retained items and Serialization Bytes.
| Lg Wt | Items | Nominal Size | Section Size | Num Sections | Num Compactions |
|:-----:|:-----:|:------------:|:------------:|:------------:|:---------------:|
| 0 | 786 | 864 | 18 | 24 | 16288 |
| 1 | 919 | 864 | 18 | 24 | 6755 |
| 2 | 846 | 864 | 18 | 24 | 2979 |
| 3 | 531 | 576 | 24 | 12 | 1308 |
| 4 | 613 | 576 | 24 | 12 | 578 |
| 5 | 529 | 576 | 24 | 12 | 246 |
| 6 | 528 | 576 | 24 | 12 | 106 |
| 7 | 781 | 576 | 24 | 12 | 33 |
| 8 | 621 | 432 | 36 | 6 | 13 |
| 9 | 364 | 432 | 36 | 6 | 4 |
| 10 | 250 | 300 | 50 | 3 | 1 |
| 11 | 135 | 300 | 50 | 3 | 0 |
* Retained Items: 6903
* Serialization Bytes: 28144