You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在BigQuery中计算考虑样本各条目权重的几何平均值

问题描述

我之前了解到可以使用EXP(AVG(LN(x)))计算几何均值,这个方法非常实用。现在我需要计算带权重的几何均值,也就是计算时要考虑样本中每个条目的权重。
对应的加权几何均值计算公式如下:
加权几何均值计算公式
想咨询下如何在BigQuery中实现这个计算?有没有可以参考的、能纳入各条目权重的实现方案?
我使用的样例数据如下:

SELECT STRUCT(JSON_EXTRACT_SCALAR(mass, '$.subs_sum') AS subs, JSON_EXTRACT_SCALAR(mass, '$.division') AS division) mass  FROM UNNEST (
    [
        '''{
            "subs_sum": "188292",
            "division": "0.7708596151869399"
        }''',
        '''{
            "subs_sum": "1182",
            "division": "0.8344408128719736"
        }''',
        '''{
            "subs_sum": "142559",
            "division": "0.9539818702339475"
        }''',
        '''{
            "subs_sum": "14047",
            "division": "0.7836811141666864"
        }''',
        '''{
            "subs_sum": "70344",
            "division": "0.7724158684628387"
        }''',
        '''{
            "subs_sum": "101516",
            "division": "0.8676896770665041"
        }''',
        '''{
            "subs_sum": "12459",
            "division": "0.8029440607145902"
        }''',
        '''{
            "subs_sum": "26070",
            "division": "0.9793106723267602"
        }''',
        '''{
            "subs_sum": "151959",
            "division": "0.839048212451375"
        }''',
        '''{
            "subs_sum": "5234",
            "division": "0.684263034290403"
        }'''
    ]
) mass 

解决方案

加权几何均值的实现可以在普通几何均值的基础上调整:把原来的求平均操作替换为加权平均即可,对应公式的逻辑为:先对每个数值取自然对数,乘以对应权重求和后除以总权重,最后取指数就能得到结果。
针对你提供的样例数据,subs_sum是权重字段,division是要计算均值的数值字段,实现代码如下:

WITH sample_data AS (
  -- 先处理样例数据,把字符串字段转成数值类型
  SELECT 
    CAST(mass.subs_sum AS INT64) AS weight,
    CAST(mass.division AS FLOAT64) AS value
  FROM (
    SELECT STRUCT(JSON_EXTRACT_SCALAR(mass, '$.subs_sum') AS subs, JSON_EXTRACT_SCALAR(mass, '$.division') AS division) mass  
    FROM UNNEST (
        [
            '''{
                "subs_sum": "188292",
                "division": "0.7708596151869399"
            }''',
            '''{
                "subs_sum": "1182",
                "division": "0.8344408128719736"
            }''',
            '''{
                "subs_sum": "142559",
                "division": "0.9539818702339475"
            }''',
            '''{
                "subs_sum": "14047",
                "division": "0.7836811141666864"
            }''',
            '''{
                "subs_sum": "70344",
                "division": "0.7724158684628387"
            }''',
            '''{
                "subs_sum": "101516",
                "division": "0.8676896770665041"
            }''',
            '''{
                "subs_sum": "12459",
                "division": "0.8029440607145902"
            }''',
            '''{
                "subs_sum": "26070",
                "division": "0.9793106723267602"
            }''',
            '''{
                "subs_sum": "151959",
                "division": "0.839048212451375"
            }''',
            '''{
                "subs_sum": "5234",
                "division": "0.684263034290403"
            }'''
        ]
    ) mass 
  )
)
SELECT 
  EXP(SUM(LN(value) * weight) / SUM(weight)) AS weighted_geometric_mean
FROM sample_data

运行上述代码得到的加权几何均值结果约为0.833。如果需要按分组计算不同维度的加权几何均值,只需要在最后查询时加上对应的GROUP BY字段即可。


内容的提问来源于stack exchange,提问作者Timogavk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 14:57:05