blob: 1ad22ab0b7d4c34518eb0fa16bacf3b4ebdc61ee [file] [log] [blame]
#
# Copyright 2021 Google LLC
#
# Licensed 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.
# This collection of test cases is intended to statistically evaluate the DP
# properties of the bounded quantiles aggregation provided by the DP
# library.
# The test cases and validation parameters are calibrated such that:
# - An approximate DP test accepts with a probability of at least 0.9 if the
# two data sets are protected with epsilon-DP.
# - An approximate DP test rejects with a probability of at least 0.9 if the
# two data sets are not protected with (epsilon * 1.05)-DP or if the
# failure rate is at least the delta tolerance times 1.25.
validity_parameters {
epsilon_specificity: 1.05
failure_specificity: 1.25
}
# Taking the majority vote over 9 repeated runs of a particular test case
# increases the accept and reject probabilities to 0.99911 or more.
voting_parameters {
number_of_votes: 9
}
bounded_quantiles_dp_test_case {
name: "Laplace noise, empty distribution, default parameters"
dp_test_parameters {
epsilon: 1.09861228866810969140 # = log(3)
delta_tolerance: 0.0036
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: LAPLACE
rank: [0.0, 0.01, 0.05, 0.45, 0.49, 0.5, 0.51, 0.55, 0.95, 0.99, 1.0]
max_contributions_per_partition: 1
max_partitions_contributed: 1
lower_bound: 0.0
upper_bound: 1.0
tree_height: 2
branching_factor: 5
epsilon: 1.09861228866810969140 # = log(3)
raw_entry: []
neighbour_raw_entry: []
# The number of extra entries contained in the neighbouring data set equals
# the number of contributions a single privacy unit can make.
neighbour_raw_entry: [0.5]
}
}
bounded_quantiles_dp_test_case {
name: "Laplace noise, empty distribution, many partitions contributed"
dp_test_parameters {
epsilon: 1.09861228866810969140 # = log(3)
delta_tolerance: 0.0036
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: LAPLACE
rank: [0.0, 0.01, 0.05, 0.45, 0.49, 0.5, 0.51, 0.55, 0.95, 0.99, 1.0]
max_contributions_per_partition: 1
max_partitions_contributed: 9
lower_bound: 0.0
upper_bound: 1.0
tree_height: 2
branching_factor: 5
epsilon: 1.09861228866810969140 # = log(3)
raw_entry: []
neighbour_raw_entry: []
# The number of extra entries contained in the neighbouring data set
# accounts for the number of partitions a single privacy unit can contribute
# to.
neighbour_raw_entry: [0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5]
}
}
bounded_quantiles_dp_test_case {
name: "Laplace noise, empty distribution, many contributions per partition"
dp_test_parameters {
epsilon: 1.09861228866810969140 # = log(3)
delta_tolerance: 0.0036
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: LAPLACE
rank: [0.0, 0.01, 0.05, 0.45, 0.49, 0.5, 0.51, 0.55, 0.95, 0.99, 1.0]
max_contributions_per_partition: 5
max_partitions_contributed: 1
lower_bound: 0.0
upper_bound: 1.0
tree_height: 2
branching_factor: 5
epsilon: 1.09861228866810969140 # = log(3)
raw_entry: []
neighbour_raw_entry: []
# The number of extra entries contained in the neighbouring data set equals
# the number of contributions a single privacy unit can make.
neighbour_raw_entry: [0.5, 0.5, 0.5, 0.5, 0.5]
}
}
bounded_quantiles_dp_test_case {
name: "Laplace noise, empty distribution, small epsilon"
dp_test_parameters {
epsilon: 0.1
delta_tolerance: 0.0012
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: LAPLACE
rank: [0.0, 0.01, 0.05, 0.45, 0.49, 0.5, 0.51, 0.55, 0.95, 0.99, 1.0]
max_contributions_per_partition: 1
max_partitions_contributed: 1
lower_bound: 0.0
upper_bound: 1.0
tree_height: 2
branching_factor: 5
epsilon: 0.1
raw_entry: []
neighbour_raw_entry: []
# The number of extra entries contained in the neighbouring data set equals
# the number of contributions a single privacy unit can make.
neighbour_raw_entry: [0.5]
}
}
bounded_quantiles_dp_test_case {
name: "Laplace noise, empty distribution, large epsilon"
dp_test_parameters {
epsilon: 2.19722457733621938279 # = 2log(3)
delta_tolerance: 0.0055
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: LAPLACE
rank: [0.0, 0.01, 0.05, 0.45, 0.49, 0.5, 0.51, 0.55, 0.95, 0.99, 1.0]
max_contributions_per_partition: 1
max_partitions_contributed: 1
lower_bound: 0.0
upper_bound: 1.0
tree_height: 2
branching_factor: 5
epsilon: 2.19722457733621938279 # = 2log(3)
raw_entry: []
neighbour_raw_entry: []
# The number of extra entries contained in the neighbouring data set equals
# the number of contributions a single privacy unit can make.
neighbour_raw_entry: [0.5]
}
}
bounded_quantiles_dp_test_case {
name: "Laplace noise, empty distribution, different tree parameters"
dp_test_parameters {
epsilon: 1.09861228866810969140 # = log(3)
delta_tolerance: 0.0036
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: LAPLACE
rank: [0.0, 0.01, 0.05, 0.1, 0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 1.0]
max_contributions_per_partition: 1
max_partitions_contributed: 1
lower_bound: 0.0
upper_bound: 1.0
tree_height: 3
branching_factor: 3
epsilon: 1.09861228866810969140 # = log(3)
raw_entry: []
neighbour_raw_entry: []
# The number of extra entries contained in the neighbouring data set equals
# the number of contributions a single privacy unit can make.
neighbour_raw_entry: [0.5]
}
}
bounded_quantiles_dp_test_case {
name: "Laplace noise, binary distribution, default parameters"
dp_test_parameters {
epsilon: 1.09861228866810969140 # = log(3)
delta_tolerance: 0.0036
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: LAPLACE
rank: [0.0, 0.01, 0.05, 0.1, 0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 1.0]
max_contributions_per_partition: 1
max_partitions_contributed: 1
lower_bound: 0.0
upper_bound: 1.0
tree_height: 2
branching_factor: 5
epsilon: 1.09861228866810969140 # = log(3)
# The entry values are intended to maximize the difference between two
# neighbouring data sets. All entry values significantly exceed the
# specified lower and upper bounds to check that bounding is applied
# correctly.
raw_entry: [-1000.0]
neighbour_raw_entry: [-1000.0]
# The number of extra entries in the second data set equals the number of
# contributions a single privacy unit can make.
neighbour_raw_entry: [1000.0]
}
}
bounded_quantiles_dp_test_case {
name: "Laplace noise, binary distribution, many partitions contributed"
dp_test_parameters {
epsilon: 1.09861228866810969140 # = log(3)
delta_tolerance: 0.0036
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: LAPLACE
rank: [0.0, 0.01, 0.05, 0.1, 0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 1.0]
max_contributions_per_partition: 1
max_partitions_contributed: 9
lower_bound: 0.0
upper_bound: 1.0
tree_height: 2
branching_factor: 5
epsilon: 1.09861228866810969140 # = log(3)
# The entry values are intended to maximize the difference between two
# neighbouring data sets. All entry values significantly exceed the
# specified lower and upper bounds to check that bounding is applied
# correctly.
raw_entry: [
-1000.0, -1000.0, -1000.0, -1000.0, -1000.0, -1000.0, -1000.0, -1000.0,
-1000.0
]
neighbour_raw_entry: [
-1000.0, -1000.0, -1000.0, -1000.0, -1000.0, -1000.0, -1000.0, -1000.0,
-1000.0
]
# The number of extra entries in the second data set accounts for the number
# of partitions a single privacy unit can contribute to.
neighbour_raw_entry: [
1000.0, 1000.0, 1000.0, 1000.0, 1000.0, 1000.0, 1000.0, 1000.0, 1000.0
]
}
}
bounded_quantiles_dp_test_case {
name: "Laplace noise, binary distribution, many contributions per partition"
dp_test_parameters {
epsilon: 1.09861228866810969140 # = log(3)
delta_tolerance: 0.0036
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: LAPLACE
rank: [0.0, 0.01, 0.05, 0.1, 0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 1.0]
max_contributions_per_partition: 5
max_partitions_contributed: 1
lower_bound: 0.0
upper_bound: 1.0
tree_height: 2
branching_factor: 5
epsilon: 1.09861228866810969140 # = log(3)
# The entry values are intended to maximize the difference between two
# neighbouring data sets. All entry values significantly exceed the
# specified lower and upper bounds to check that bounding is applied
# correctly.
raw_entry: [-1000.0, -1000.0, -1000.0, -1000.0, -1000.0]
neighbour_raw_entry: [-1000.0, -1000.0, -1000.0, -1000.0, -1000.0]
# The number of extra entries in the second data set equals the number of
# contributions a single privacy unit can make.
neighbour_raw_entry: [1000.0, 1000.0, 1000.0, 1000.0, 1000.0]
}
}
bounded_quantiles_dp_test_case {
name: "Laplace noise, binary distribution, small epsilon"
dp_test_parameters {
epsilon: 0.1
delta_tolerance: 0.0012
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: LAPLACE
rank: [0.0, 0.01, 0.05, 0.1, 0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 1.0]
max_contributions_per_partition: 1
max_partitions_contributed: 1
lower_bound: 0.0
upper_bound: 1.0
tree_height: 2
branching_factor: 5
epsilon: 0.1
# The entry values are intended to maximize the difference between two
# neighbouring data sets. All entry values significantly exceed the
# specified lower and upper bounds to check that bounding is applied
# correctly.
raw_entry: [-1000.0]
neighbour_raw_entry: [-1000.0]
# The number of extra entries in the second data set equals the number of
# contributions a single privacy unit can make.
neighbour_raw_entry: [1000.0]
}
}
bounded_quantiles_dp_test_case {
name: "Laplace noise, binary distribution, large epsilon"
dp_test_parameters {
epsilon: 2.19722457733621938279 # = 2log(3)
delta_tolerance: 0.0055
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: LAPLACE
rank: [0.0, 0.01, 0.05, 0.1, 0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 1.0]
max_contributions_per_partition: 1
max_partitions_contributed: 1
lower_bound: 0.0
upper_bound: 1.0
tree_height: 2
branching_factor: 5
epsilon: 2.19722457733621938279 # = 2log(3)
# The entry values are intended to maximize the difference between two
# neighbouring data sets. All entry values significantly exceed the
# specified lower and upper bounds to check that bounding is applied
# correctly.
raw_entry: [-1000.0]
neighbour_raw_entry: [-1000.0]
# The number of extra entries in the second data set equals the number of
# contributions a single privacy unit can make.
neighbour_raw_entry: [1000.0]
}
}
bounded_quantiles_dp_test_case {
name: "Laplace noise, binary distribution, different tree parameters"
dp_test_parameters {
epsilon: 1.09861228866810969140 # = log(3)
delta_tolerance: 0.0036
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: LAPLACE
rank: [0.0, 0.01, 0.05, 0.1, 0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 1.0]
max_contributions_per_partition: 1
max_partitions_contributed: 1
lower_bound: 0.0
upper_bound: 1.0
tree_height: 3
branching_factor: 3
epsilon: 1.09861228866810969140 # = log(3)
# The entry values are intended to maximize the difference between two
# neighbouring data sets. All entry values significantly exceed the
# specified lower and upper bounds to check that bounding is applied
# correctly.
raw_entry: [-1000.0]
neighbour_raw_entry: [-1000.0]
# The number of extra entries in the second data set equals the number of
# contributions a single privacy unit can make.
neighbour_raw_entry: [1000.0]
}
}
bounded_quantiles_dp_test_case {
name: "Laplace noise, linear distribution, default parameters"
dp_test_parameters {
epsilon: 1.09861228866810969140 # = log(3)
delta_tolerance: 0.0036
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: LAPLACE
rank: [0.0, 0.01, 0.05, 0.1, 0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 1.0]
max_contributions_per_partition: 1
max_partitions_contributed: 1
lower_bound: -1.0
upper_bound: 2.0
tree_height: 2
branching_factor: 5
epsilon: 1.09861228866810969140 # = log(3)
# An arbitrary distribution where entries are spread out.
raw_entry: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
neighbour_raw_entry: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
# The number of extra entries contained in the neighbouring data set equals
# the number of contributions a single privacy unit can make.
neighbour_raw_entry: [0.0]
}
}
bounded_quantiles_dp_test_case {
name: "Laplace noise, linear distribution, many partitions contributed"
dp_test_parameters {
epsilon: 1.09861228866810969140 # = log(3)
delta_tolerance: 0.0036
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: LAPLACE
rank: [0.0, 0.01, 0.05, 0.1, 0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 1.0]
max_contributions_per_partition: 1
max_partitions_contributed: 9
lower_bound: -1.0
upper_bound: 2.0
tree_height: 2
branching_factor: 5
epsilon: 1.09861228866810969140 # = log(3)
# An arbitrary distribution where entries are spread out.
raw_entry: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
neighbour_raw_entry: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
# The number of extra entries in the second data set accounts for the number
# of partitions a single privacy unit can contribute to.
neighbour_raw_entry: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
}
}
bounded_quantiles_dp_test_case {
name: "Laplace noise, linear distribution, many contributions per partition"
dp_test_parameters {
epsilon: 1.09861228866810969140 # = log(3)
delta_tolerance: 0.0036
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: LAPLACE
rank: [0.0, 0.01, 0.05, 0.1, 0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 1.0]
max_contributions_per_partition: 5
max_partitions_contributed: 1
lower_bound: -1.0
upper_bound: 2.0
tree_height: 2
branching_factor: 5
epsilon: 1.09861228866810969140 # = log(3)
# An arbitrary distribution where entries are spread out.
raw_entry: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
neighbour_raw_entry: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
# The number of extra entries contained in the neighbouring data set equals
# the number of contributions a single privacy unit can make.
neighbour_raw_entry: [0.0, 0.0, 0.0, 0.0, 0.0]
}
}
bounded_quantiles_dp_test_case {
name: "Laplace noise, linear distribution, small epsilon"
dp_test_parameters {
epsilon: 0.1
delta_tolerance: 0.0012
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: LAPLACE
rank: [0.0, 0.01, 0.05, 0.1, 0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 1.0]
max_contributions_per_partition: 1
max_partitions_contributed: 1
lower_bound: -1.0
upper_bound: 2.0
tree_height: 2
branching_factor: 5
epsilon: 0.1
# An arbitrary distribution where entries are spread out.
raw_entry: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
neighbour_raw_entry: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
# The number of extra entries contained in the neighbouring data set equals
# the number of contributions a single privacy unit can make.
neighbour_raw_entry: [0.0]
}
}
bounded_quantiles_dp_test_case {
name: "Laplace noise, linear distribution, large epsilon"
dp_test_parameters {
epsilon: 2.19722457733621938279 # = 2log(3)
delta_tolerance: 0.0055
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: LAPLACE
rank: [0.0, 0.01, 0.05, 0.1, 0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 1.0]
max_contributions_per_partition: 1
max_partitions_contributed: 1
lower_bound: -1.0
upper_bound: 2.0
tree_height: 2
branching_factor: 5
epsilon: 2.19722457733621938279 # = 2log(3)
# An arbitrary distribution where entries are spread out.
raw_entry: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
neighbour_raw_entry: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
# The number of extra entries contained in the neighbouring data set equals
# the number of contributions a single privacy unit can make.
neighbour_raw_entry: [0.0]
}
}
bounded_quantiles_dp_test_case {
name: "Laplace noise, linear distribution, different tree parameters"
dp_test_parameters {
epsilon: 1.09861228866810969140 # = log(3)
delta_tolerance: 0.0036
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: LAPLACE
rank: [0.0, 0.01, 0.05, 0.1, 0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 1.0]
max_contributions_per_partition: 1
max_partitions_contributed: 1
lower_bound: -1.0
upper_bound: 2.0
tree_height: 3
branching_factor: 3
epsilon: 1.09861228866810969140 # = log(3)
# An arbitrary distribution where entries are spread out.
raw_entry: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
neighbour_raw_entry: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
# The number of extra entries contained in the neighbouring data set equals
# the number of contributions a single privacy unit can make.
neighbour_raw_entry: [0.0]
}
}
bounded_quantiles_dp_test_case {
name: "Gaussian noise, empty distribution, default parameters"
dp_test_parameters {
epsilon: 1.09861228866810969140 # = log(3)
delta: 0.00001
delta_tolerance: 0.0036
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: GAUSSIAN
rank: [0.0, 0.01, 0.05, 0.45, 0.49, 0.5, 0.51, 0.55, 0.95, 0.99, 1.0]
max_contributions_per_partition: 1
max_partitions_contributed: 1
lower_bound: 0.0
upper_bound: 1.0
tree_height: 2
branching_factor: 5
epsilon: 1.09861228866810969140 # = log(3)
delta: 0.00001
raw_entry: []
neighbour_raw_entry: []
# The number of extra entries contained in the neighbouring data set equals
# the number of contributions a single privacy unit can make.
neighbour_raw_entry: [0.5]
}
}
bounded_quantiles_dp_test_case {
name: "Gaussian noise, empty distribution, many partitions contributed"
dp_test_parameters {
epsilon: 1.09861228866810969140 # = log(3)
delta: 0.00001
delta_tolerance: 0.0036
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: GAUSSIAN
rank: [0.0, 0.01, 0.05, 0.45, 0.49, 0.5, 0.51, 0.55, 0.95, 0.99, 1.0]
max_contributions_per_partition: 1
max_partitions_contributed: 9
lower_bound: 0.0
upper_bound: 1.0
tree_height: 2
branching_factor: 5
epsilon: 1.09861228866810969140 # = log(3)
delta: 0.00001
raw_entry: []
neighbour_raw_entry: []
# The number of extra entries contained in the neighbouring data set
# accounts for the number of partitions a single privacy unit can contribute
# to.
neighbour_raw_entry: [0.5, 0.5, 0.5]
}
}
bounded_quantiles_dp_test_case {
name: "Gaussian noise, empty distribution, many contributions per partition"
dp_test_parameters {
epsilon: 1.09861228866810969140 # = log(3)
delta: 0.00001
delta_tolerance: 0.0036
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: GAUSSIAN
rank: [0.0, 0.01, 0.05, 0.45, 0.49, 0.5, 0.51, 0.55, 0.95, 0.99, 1.0]
max_contributions_per_partition: 5
max_partitions_contributed: 1
lower_bound: 0.0
upper_bound: 1.0
tree_height: 2
branching_factor: 5
epsilon: 1.09861228866810969140 # = log(3)
delta: 0.00001
raw_entry: []
neighbour_raw_entry: []
# The number of extra entries contained in the neighbouring data set equals
# the number of contributions a single privacy unit can make.
neighbour_raw_entry: [0.5, 0.5, 0.5, 0.5, 0.5]
}
}
bounded_quantiles_dp_test_case {
name: "Gaussian noise, empty distribution, small epsilon"
dp_test_parameters {
epsilon: 0.1
delta: 0.00001
delta_tolerance: 0.0012
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: GAUSSIAN
rank: [0.0, 0.01, 0.05, 0.45, 0.49, 0.5, 0.51, 0.55, 0.95, 0.99, 1.0]
max_contributions_per_partition: 1
max_partitions_contributed: 1
lower_bound: 0.0
upper_bound: 1.0
tree_height: 2
branching_factor: 5
epsilon: 0.1
delta: 0.00001
raw_entry: []
neighbour_raw_entry: []
# The number of extra entries contained in the neighbouring data set equals
# the number of contributions a single privacy unit can make.
neighbour_raw_entry: [0.5]
}
}
bounded_quantiles_dp_test_case {
name: "Gaussian noise, empty distribution, large epsilon"
dp_test_parameters {
epsilon: 2.19722457733621938279 # = 2log(3)
delta: 0.00001
delta_tolerance: 0.0055
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: GAUSSIAN
rank: [0.0, 0.01, 0.05, 0.45, 0.49, 0.5, 0.51, 0.55, 0.95, 0.99, 1.0]
max_contributions_per_partition: 1
max_partitions_contributed: 1
lower_bound: 0.0
upper_bound: 1.0
tree_height: 2
branching_factor: 5
epsilon: 2.19722457733621938279 # = 2log(3)
delta: 0.00001
raw_entry: []
neighbour_raw_entry: []
# The number of extra entries contained in the neighbouring data set equals
# the number of contributions a single privacy unit can make.
neighbour_raw_entry: [0.5]
}
}
bounded_quantiles_dp_test_case {
name: "Gaussian noise, empty distribution, small delta"
dp_test_parameters {
epsilon: 1.09861228866810969140 # = log(3)
delta: 0.000001
delta_tolerance: 0.0036
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: GAUSSIAN
rank: [0.0, 0.01, 0.05, 0.45, 0.49, 0.5, 0.51, 0.55, 0.95, 0.99, 1.0]
max_contributions_per_partition: 5
max_partitions_contributed: 1
lower_bound: 0.0
upper_bound: 1.0
tree_height: 2
branching_factor: 5
epsilon: 1.09861228866810969140 # = log(3)
delta: 0.000001
raw_entry: []
neighbour_raw_entry: []
# The number of extra entries contained in the neighbouring data set equals
# the number of contributions a single privacy unit can make.
neighbour_raw_entry: [0.5]
}
}
bounded_quantiles_dp_test_case {
name: "Gaussian noise, empty distribution, different tree parameters"
dp_test_parameters {
epsilon: 1.09861228866810969140 # = log(3)
delta: 0.00001
delta_tolerance: 0.0036
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: GAUSSIAN
rank: [0.0, 0.01, 0.05, 0.1, 0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 1.0]
max_contributions_per_partition: 1
max_partitions_contributed: 1
lower_bound: 0.0
upper_bound: 1.0
tree_height: 3
branching_factor: 3
epsilon: 1.09861228866810969140 # = log(3)
delta: 0.00001
raw_entry: []
neighbour_raw_entry: []
# The number of extra entries contained in the neighbouring data set equals
# the number of contributions a single privacy unit can make.
neighbour_raw_entry: [0.5]
}
}
bounded_quantiles_dp_test_case {
name: "Gaussian noise, binary distribution, default parameters"
dp_test_parameters {
epsilon: 1.09861228866810969140 # = log(3)
delta: 0.00001
delta_tolerance: 0.0036
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: GAUSSIAN
rank: [0.0, 0.01, 0.05, 0.1, 0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 1.0]
max_contributions_per_partition: 1
max_partitions_contributed: 1
lower_bound: 0.0
upper_bound: 1.0
tree_height: 2
branching_factor: 5
epsilon: 1.09861228866810969140 # = log(3)
delta: 0.00001
# The entry values are intended to maximize the difference between two
# neighbouring data sets. All entry values significantly exceed the
# specified lower and upper bounds to check that bounding is applied
# correctly.
raw_entry: [-1000.0]
neighbour_raw_entry: [-1000.0]
# The number of extra entries in the second data set equals the number of
# contributions a single privacy unit can make.
neighbour_raw_entry: [1000.0]
}
}
bounded_quantiles_dp_test_case {
name: "Gaussian noise, binary distribution, many partitions contributed"
dp_test_parameters {
epsilon: 1.09861228866810969140 # = log(3)
delta: 0.00001
delta_tolerance: 0.0036
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: GAUSSIAN
rank: [0.0, 0.01, 0.05, 0.1, 0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 1.0]
max_contributions_per_partition: 1
max_partitions_contributed: 9
lower_bound: 0.0
upper_bound: 1.0
tree_height: 2
branching_factor: 5
epsilon: 1.09861228866810969140 # = log(3)
delta: 0.00001
# The entry values are intended to maximize the difference between two
# neighbouring data sets. All entry values significantly exceed the
# specified lower and upper bounds to check that bounding is applied
# correctly.
raw_entry: [-1000.0, -1000.0, -1000.0]
neighbour_raw_entry: [-1000.0, -1000.0, -1000.0]
# The number of extra entries in the second data set accounts for the number
# of partitions a single privacy unit can contribute to.
neighbour_raw_entry: [1000.0, 1000.0, 1000.0]
}
}
bounded_quantiles_dp_test_case {
name: "Gaussian noise, binary distribution, many contributions per partition"
dp_test_parameters {
epsilon: 1.09861228866810969140 # = log(3)
delta: 0.00001
delta_tolerance: 0.0036
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: GAUSSIAN
rank: [0.0, 0.01, 0.05, 0.1, 0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 1.0]
max_contributions_per_partition: 5
max_partitions_contributed: 1
lower_bound: 0.0
upper_bound: 1.0
tree_height: 2
branching_factor: 5
epsilon: 1.09861228866810969140 # = log(3)
delta: 0.00001
# The entry values are intended to maximize the difference between two
# neighbouring data sets. All entry values significantly exceed the
# specified lower and upper bounds to check that bounding is applied
# correctly.
raw_entry: [-1000.0, -1000.0, -1000.0, -1000.0, -1000.0]
neighbour_raw_entry: [-1000.0, -1000.0, -1000.0, -1000.0, -1000.0]
# The number of extra entries in the second data set equals the number of
# contributions a single privacy unit can make.
neighbour_raw_entry: [1000.0, 1000.0, 1000.0, 1000.0, 1000.0]
}
}
bounded_quantiles_dp_test_case {
name: "Gaussian noise, binary distribution, small epsilon"
dp_test_parameters {
epsilon: 0.1
delta: 0.00001
delta_tolerance: 0.0012
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: GAUSSIAN
rank: [0.0, 0.01, 0.05, 0.1, 0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 1.0]
max_contributions_per_partition: 1
max_partitions_contributed: 1
lower_bound: 0.0
upper_bound: 1.0
tree_height: 2
branching_factor: 5
epsilon: 0.1
delta: 0.00001
# The entry values are intended to maximize the difference between two
# neighbouring data sets. All entry values significantly exceed the
# specified lower and upper bounds to check that bounding is applied
# correctly.
raw_entry: [-1000.0]
neighbour_raw_entry: [-1000.0]
# The number of extra entries in the second data set equals the number of
# contributions a single privacy unit can make.
neighbour_raw_entry: [1000.0]
}
}
bounded_quantiles_dp_test_case {
name: "Gaussian noise, binary distribution, large epsilon"
dp_test_parameters {
epsilon: 2.19722457733621938279 # = 2log(3)
delta: 0.00001
delta_tolerance: 0.0055
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: GAUSSIAN
rank: [0.0, 0.01, 0.05, 0.1, 0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 1.0]
max_contributions_per_partition: 1
max_partitions_contributed: 1
lower_bound: 0.0
upper_bound: 1.0
tree_height: 2
branching_factor: 5
epsilon: 2.19722457733621938279 # = 2log(3)
delta: 0.00001
# The entry values are intended to maximize the difference between two
# neighbouring data sets. All entry values significantly exceed the
# specified lower and upper bounds to check that bounding is applied
# correctly.
raw_entry: [-1000.0]
neighbour_raw_entry: [-1000.0]
# The number of extra entries in the second data set equals the number of
# contributions a single privacy unit can make.
neighbour_raw_entry: [1000.0]
}
}
bounded_quantiles_dp_test_case {
name: "Gaussian noise, binary distribution, small delta"
dp_test_parameters {
epsilon: 1.09861228866810969140 # = log(3)
delta: 0.000001
delta_tolerance: 0.0036
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: GAUSSIAN
rank: [0.0, 0.01, 0.05, 0.45, 0.49, 0.5, 0.51, 0.55, 0.95, 0.99, 1.0]
max_contributions_per_partition: 5
max_partitions_contributed: 1
lower_bound: 0.0
upper_bound: 1.0
tree_height: 2
branching_factor: 5
epsilon: 1.09861228866810969140 # = log(3)
delta: 0.000001
# The entry values are intended to maximize the difference between two
# neighbouring data sets. All entry values significantly exceed the
# specified lower and upper bounds to check that bounding is applied
# correctly.
raw_entry: [-1000.0]
neighbour_raw_entry: [-1000.0]
# The number of extra entries in the second data set equals the number of
# contributions a single privacy unit can make.
neighbour_raw_entry: [1000.0]
}
}
bounded_quantiles_dp_test_case {
name: "Gaussian noise, binary distribution, different tree parameters"
dp_test_parameters {
epsilon: 1.09861228866810969140 # = log(3)
delta: 0.00001
delta_tolerance: 0.0036
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: GAUSSIAN
rank: [0.0, 0.01, 0.05, 0.1, 0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 1.0]
max_contributions_per_partition: 1
max_partitions_contributed: 1
lower_bound: 0.0
upper_bound: 1.0
tree_height: 3
branching_factor: 3
epsilon: 1.09861228866810969140 # = log(3)
delta: 0.00001
# The entry values are intended to maximize the difference between two
# neighbouring data sets. All entry values significantly exceed the
# specified lower and upper bounds to check that bounding is applied
# correctly.
raw_entry: [-1000.0]
neighbour_raw_entry: [-1000.0]
# The number of extra entries in the second data set equals the number of
# contributions a single privacy unit can make.
neighbour_raw_entry: [1000.0]
}
}
bounded_quantiles_dp_test_case {
name: "Gaussian noise, linear distribution, default parameters"
dp_test_parameters {
epsilon: 1.09861228866810969140 # = log(3)
delta: 0.00001
delta_tolerance: 0.0036
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: GAUSSIAN
rank: [0.0, 0.01, 0.05, 0.1, 0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 1.0]
max_contributions_per_partition: 1
max_partitions_contributed: 1
lower_bound: -1.0
upper_bound: 2.0
tree_height: 2
branching_factor: 5
epsilon: 1.09861228866810969140 # = log(3)
delta: 0.00001
# An arbitrary distribution where entries are spread out.
raw_entry: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
neighbour_raw_entry: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
# The number of extra entries contained in the neighbouring data set equals
# the number of contributions a single privacy unit can make.
neighbour_raw_entry: [0.0]
}
}
bounded_quantiles_dp_test_case {
name: "Gaussian noise, linear distribution, many partitions contributed"
dp_test_parameters {
epsilon: 1.09861228866810969140 # = log(3)
delta: 0.00001
delta_tolerance: 0.0036
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: GAUSSIAN
rank: [0.0, 0.01, 0.05, 0.1, 0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 1.0]
max_contributions_per_partition: 1
max_partitions_contributed: 9
lower_bound: -1.0
upper_bound: 2.0
tree_height: 2
branching_factor: 5
epsilon: 1.09861228866810969140 # = log(3)
delta: 0.00001
# An arbitrary distribution where entries are spread out.
raw_entry: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
neighbour_raw_entry: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
# The number of extra entries in the second data set accounts for the number
# of partitions a single privacy unit can contribute to.
neighbour_raw_entry: [0.0, 0.0, 0.0]
}
}
bounded_quantiles_dp_test_case {
name: "Gaussian noise, linear distribution, many contributions per partition"
dp_test_parameters {
epsilon: 1.09861228866810969140 # = log(3)
delta: 0.00001
delta_tolerance: 0.0036
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: GAUSSIAN
rank: [0.0, 0.01, 0.05, 0.1, 0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 1.0]
max_contributions_per_partition: 5
max_partitions_contributed: 1
lower_bound: -1.0
upper_bound: 2.0
tree_height: 2
branching_factor: 5
epsilon: 1.09861228866810969140 # = log(3)
delta: 0.00001
# An arbitrary distribution where entries are spread out.
raw_entry: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
neighbour_raw_entry: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
# The number of extra entries contained in the neighbouring data set equals
# the number of contributions a single privacy unit can make.
neighbour_raw_entry: [0.0, 0.0, 0.0, 0.0, 0.0]
}
}
bounded_quantiles_dp_test_case {
name: "Gaussian noise, linear distribution, small epsilon"
dp_test_parameters {
epsilon: 0.1
delta: 0.00001
delta_tolerance: 0.0012
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: GAUSSIAN
rank: [0.0, 0.01, 0.05, 0.1, 0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 1.0]
max_contributions_per_partition: 1
max_partitions_contributed: 1
lower_bound: -1.0
upper_bound: 2.0
tree_height: 2
branching_factor: 5
epsilon: 0.1
delta: 0.00001
# An arbitrary distribution where entries are spread out.
raw_entry: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
neighbour_raw_entry: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
# The number of extra entries contained in the neighbouring data set equals
# the number of contributions a single privacy unit can make.
neighbour_raw_entry: [0.0]
}
}
bounded_quantiles_dp_test_case {
name: "Gaussian noise, linear distribution, large epsilon"
dp_test_parameters {
epsilon: 2.19722457733621938279 # = 2log(3)
delta: 0.00001
delta_tolerance: 0.0055
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: GAUSSIAN
rank: [0.0, 0.01, 0.05, 0.1, 0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 1.0]
max_contributions_per_partition: 1
max_partitions_contributed: 1
lower_bound: -1.0
upper_bound: 2.0
tree_height: 2
branching_factor: 5
epsilon: 2.19722457733621938279 # = 2log(3)
delta: 0.00001
# An arbitrary distribution where entries are spread out.
raw_entry: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
neighbour_raw_entry: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
# The number of extra entries contained in the neighbouring data set equals
# the number of contributions a single privacy unit can make.
neighbour_raw_entry: [0.0]
}
}
bounded_quantiles_dp_test_case {
name: "Gaussian noise, linear distribution, small delta"
dp_test_parameters {
epsilon: 1.09861228866810969140 # = log(3)
delta: 0.000001
delta_tolerance: 0.0036
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: GAUSSIAN
rank: [0.0, 0.01, 0.05, 0.45, 0.49, 0.5, 0.51, 0.55, 0.95, 0.99, 1.0]
max_contributions_per_partition: 5
max_partitions_contributed: 1
lower_bound: -1.0
upper_bound: 2.0
tree_height: 2
branching_factor: 5
epsilon: 1.09861228866810969140 # = log(3)
delta: 0.000001
# An arbitrary distribution where entries are spread out.
raw_entry: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
neighbour_raw_entry: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
# The number of extra entries contained in the neighbouring data set equals
# the number of contributions a single privacy unit can make.
neighbour_raw_entry: [0.0]
}
}
bounded_quantiles_dp_test_case {
name: "Gaussian noise, linear distribution, different tree parameters"
dp_test_parameters {
epsilon: 1.09861228866810969140 # = log(3)
delta: 0.00001
delta_tolerance: 0.0036
num_of_buckets: 32
}
bounded_quantiles_sampling_parameters {
number_of_samples: 250000
noise_type: GAUSSIAN
rank: [0.0, 0.01, 0.05, 0.1, 0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 1.0]
max_contributions_per_partition: 1
max_partitions_contributed: 1
lower_bound: -1.0
upper_bound: 2.0
tree_height: 3
branching_factor: 3
epsilon: 1.09861228866810969140 # = log(3)
delta: 0.00001
# An arbitrary distribution where entries are spread out.
raw_entry: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
neighbour_raw_entry: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
# The number of extra entries contained in the neighbouring data set equals
# the number of contributions a single privacy unit can make.
neighbour_raw_entry: [0.0]
}
}