Анонимизация координат геолокации в python

У меня есть csv с именами, суммой транзакции и точной долготой и широтой места, где была выполнена транзакция. Я хочу, чтобы конечный документ был анонимным — для этого мне нужно преобразовать его в CSV, где имена хэшируются (это должно быть достаточно просто), а долгота и широта скрыты в радиусе 2 км. То есть изменение координат так, чтобы они находились в пределах не более 2 км от исходного местоположения, но случайным образом, чтобы это не было обратимо по формуле. Кто-нибудь знает, как работать с координатами таким образом?


person Gal Chen    schedule 21.03.2018    source источник
comment
Хеширование имен не сделает их анонимными, вы все равно сможете сопоставить все транзакции одного человека. Координаты можно округлить (например, до ближайшей 0,1 угловой минуты), а не рандомизировать, но деанонимизация часто может привести к неожиданным результатам!   -  person Constance    schedule 21.03.2018


Ответы (1)


Вы можете использовать хэширование с учетом местоположения (LSH) для отображения похожих координат (т.е. в пределах в радиусе 2 км), до того же значения с высокой вероятностью. Следовательно, координаты, соответствующие одному сегменту, будут расположены ближе друг к другу в евклидовом пространстве.

В противном случае другим методом может быть использование любой стандартной хеш-функции y = H(x) и вычисление y по модулю N, где N — диапазон координат. Предположим, ваши координаты равны P = (500 700), и вы хотите вернуть рандомизированное значение в диапазоне [-x,x] км от P.

P = (500,700)
Range = 1000 #1000 meters for example
#Anonymize co-ordinates to within specified range
ANON_X = hash(P[0]) % Range
ANON_Y = hash(P[1]) % Range
#Randomly add/subtract range
P = (P + ANON_X*random.choice([-1,1]), P+ANON_Y*random.choice([-1,1]))
person gratio    schedule 21.03.2018
comment
если вы возвращаете рандомизированное значение в диапазоне [-x,x] км от P, то все, что нужно сделать кому-то, — это взять их множество с одним и тем же P и усреднить их, после чего они найдут P. - person Constance; 21.03.2018
comment
также random.choice([-1, 1]) выбирает только либо -1, либо 1, ничего между ними! - person Constance; 21.03.2018
comment
Усреднение по большому количеству P теоретически будет работать, но я предполагаю, что исходные координаты редко распределены в евклидовом пространстве, поэтому вы не сможете взять много точек для усреднения. random.choice() будет работать, потому что ANON_X уже хранит случайное значение в предоставленном диапазоне, и нам нужно решить, добавить или вычесть значение в диапазоне. - person gratio; 22.03.2018