geolite_city_bq_b2 数据集的准确性

Posted

技术标签:

【中文标题】geolite_city_bq_b2 数据集的准确性【英文标题】:Accuracy of the geolite_city_bq_b2 dataset 【发布时间】:2019-01-24 19:15:46 【问题描述】:

我认为 BigQuery fh-bigquery.geocode.geolite_city_bq_b2 数据集中存在不准确之处,我很好奇其他人是否也注意到了这一点。

背景:我正在运行来自 Ramtin M. Seraj 的 BigQuery 代码,他/我的逻辑似乎是合理的。但是,有一些已知的 IP 地址可以代表某些地方,例如Tokyo @ 150.249.199.17,但 Ramtin 的查询表明位于美国纽约州罗切斯特或加拿大安大略省渥太华。如果查询逻辑是合理的,那么唯一的结论是底层的 Geolite 数据集不是。

要验证,请查看此查询的结果:

SELECT *
FROM `fh-bigquery.geocode.geolite_city_bq_b2b`
WHERE classB = 38649

从这些结果中请注意,startIp = 150.245.0.0 和 endIp = 150.249.255.255,因此地址 150.249.199.17 在此 IP 范围内。

现在与来自 https://ipinfo.io/150.249.199.17 的结果以及来自以下 BigQuery 的结果进行比较。请注意,所有计算值(例如 IP 地址的 IPV4_TO_INT64())都在上述查询返回的范围内。

SELECT '150.249.199.17' as ipAddress
  , NET.IPV4_TO_INT64(NET.IP_FROM_STRING('150.249.199.17')) AS clientIpNum_int
  , TRUNC(NET.IPV4_TO_INT64(NET.IP_FROM_STRING('150.249.199.17'))/(256*256)) AS classB
  , CAST(TRUNC(NET.IPV4_TO_INT64(NET.IP_FROM_STRING('150.249.199.17'))/(256*256)) as INT64) as client_classB_int

附言我会支持第一个答案,或者添加评论,但我还没有足够的声望!

【问题讨论】:

答案更新如下! 【参考方案1】:

2019 年,答案大大改进

https://medium.com/@hoffa/geolocation-with-bigquery-de-identify-76-million-ip-addresses-in-20-seconds-e9e652480bd2
#standardSQL
# replace with your source of IP addresses
# here I'm using the same Wikipedia set from the previous article
WITH source_of_ip_addresses AS (
  SELECT REGEXP_REPLACE(contributor_ip, 'xxx', '0')  ip, COUNT(*) c
  FROM `publicdata.samples.wikipedia`
  WHERE contributor_ip IS NOT null  
  GROUP BY 1
)
SELECT country_name, SUM(c) c
FROM (
  SELECT ip, country_name, c
  FROM (
    SELECT *, NET.SAFE_IP_FROM_STRING(ip) & NET.IP_NET_MASK(4, mask) network_bin
    FROM source_of_ip_addresses, UNNEST(GENERATE_ARRAY(9,32)) mask
    WHERE BYTE_LENGTH(NET.SAFE_IP_FROM_STRING(ip)) = 4
  )
  JOIN `fh-bigquery.geocode.201806_geolite2_city_ipv4_locs`  
  USING (network_bin, mask)
)
GROUP BY 1
ORDER BY 2 DESC

我即将在 BigQuery 中发布一个经过大幅改进的 Geolite 版本。请继续关注https://twitter.com/felipehoffa 和https://medium.com/@hoffa。然后我也会更新这个答案。

话虽如此,为了回答标题这个问题的准确性部分,Maxmind 说:

GeoLite2 数据库是免费的 IP 地理定位数据库,可与 MaxMind 的 GeoIP2 数据库相媲美,但准确性较低

https://dev.maxmind.com/geoip/geoip2/geolite2/

【讨论】:

以上是关于geolite_city_bq_b2 数据集的准确性的主要内容,如果未能解决你的问题,请参考以下文章

如何绘制具有多个数据集的多个分类器的准确性 [关闭]

如何评估/提高来自具有不平衡数据集的神经网络的预测的准确性?

Keras 图像分类 - 验证数据集的预测准确性与 val_acc 不匹配

在机器学习中的不平衡数据集的情况下,AUC 是比准确性更好的指标吗?如果不是,那么哪个是最佳指标?

Caffe 如何确定测试集的准确性?

深度学习笔记2-模型在测试集的准确率大于训练集