A média geométrica é uma medida que avalia a tendência central de um conjunto de números positivos ao calcular a raiz $n$-ésima do produto desses números, onde $n$ é a quantidade de valores no conjunto. Ela é mais adequada do que a média aritmética para dados que crescem multiplicativamente ou que representam taxas de crescimento, como juros compostos.

Média geométrica simples

A média geométrica simples é usada quando todos os valores do conjunto têm o mesmo peso.

Fórmula:

$$\large \begin{matrix} G = (x_1 \cdot x_2 \cdot \ldots \cdot x_n)^\frac{1}{n}\\
\small ou\\ \large G = \sqrt[n]{\prod_{i=1}^{n}x_i} \end{matrix}$$


Sendo:

  • $G:$ Média geométrica
  • $x_{1}, x_{2}\dots x_{n}:$ Elementos da população ou amostra
  • $n$ ou $N:$ Número de elementos da amostra.

Python :

# Descobrindo a raiz enésima
raiz_enesima = 1 / len(values)

# Calculando a média
G = eval('*'.join(map(str, values)))**raiz_enesima

Julia :

G = (prod(values))^(1 / length(values))

Libs:

Linguagem Biblioteca Função
Python Statistics st.geometric_mean(values)
Scipy.stats sc.gmean(values)
Julia StatsBase geomean(values)

Exemplo 1

Determine a média geométrica dos valores 1, 3, 9, 27, 81 e 162.

Python

''' Sem o uso de bibliotecas '''

lista = [1, 3, 9, 27, 81, 162]
raiz_enesima = 1/len(lista)  # 0.16666666666666666
G = eval('*'.join(map(str, lista)))**raiz_enesima
print(G)

''' Utilizando a função geometric_mean da biblioteca Statistics '''

import statistics as st

lista = [1, 3, 9, 27, 81, 162]

G = st.geometric_mean(lista)
print(G)

Julia

" Sem o uso de bibliotecas "

valor = [1, 3, 9, 27, 81, 162]

G = (prod(valor))^(1 / length(valor))

Exemplo 2

Nos últimos três meses, determinado produto teve seu preço reajustado segundo os seguintes percentuais: 5%, 3% e 2,94%. Determine o percentual médio mensal de aumento do preço desse produto.

Python

''' Sem o uso de bibliotecas '''

# Como os valores são percentuais, deve-se utilizá-los somando-os ao valor atual, e no modo matemático. 5% = 1.05 / 3% = 1.03 / 2.94% = 1.0294

lista = [1.05, 1.03, 1.0294]

raiz_enesima = 1/len(lista)  # 0.3333333333333333
G = eval('*'.join(map(str, lista)))**raiz_enesima
print(G)

Julia

" Sem o uso de bibliotecas "

valor = [1.05, 1.03, 1.0294]

G = (prod(valor))^(1 / length(valor))



Média geométrica ponderada

A média geométrica ponderada leva em conta pesos diferentes para cada valor do conjunto.

Fórmula:

$$\large \begin{matrix} Gp = (x_{1} ^{ f_{1} } \cdot x_{2} ^{ f_{2} } \cdot \ldots \cdot x_{n} ^{ f_{n} } )^\frac{1}{\sum{f_i}}\\ \small ou\\ \large Gp = \sqrt[\sum f_i]{\prod_{i=1}^{n} x_{i} ^{ f_{i} }} \end{matrix}$$

Sendo:

  • $G_{p}:$ Média geométrica ponderada
  • $x_{1}, x_{2}\dots x_{n}:$ Elementos da população ou amostra
  • $f:$ Frequência dos elementos da população ou amostra
  • $n$ ou $N:$ Número de elementos da amostra.

Python :

# Descobrindo a raiz enésima
raiz_enesima = 1 / sum(freq)
# multiplicando os valores por suas respectivas frequências
lista = list(map(lambda x, y: x**y, valores, freq))
# Calculando a média
Gp = (eval('*'.join(map(str, lista))))**raiz_enesima

Julia :

Gp = prod(values .^ freq)^(1/sum(freq))

Libs:

Linguagem Biblioteca Função
Python Scipy.stats sc.gmean(values, weights=freq)
Julia StatsBase genmean(values, 0)

Exemplo

Determine a média geométrica da distribuição de frequências da tabela abaixo.

Valores Frequências
1 1
2 1
3 2
4 3

Python

''' Sem o uso de bibliotecas '''

dicio = {1:1, 2:1, 3:2, 4:3}

# criando uma lista com os valores
valores = list(dicio.keys())

# criando uma lista com as frequências
freq = list(dicio.values())

raiz_enesima = 1 / sum(dicio.values())
lista = list(map(lambda x, y: x**y, valores, freq))
Gp = eval('*'.join(map(str, lista)))**raiz_enesima
print(Gp)

Julia

" Sem o uso de bibliotecas "

dicio = Dict(1=>1, 2=>1, 3=>2, 4=>3)

# separando os valores e suas frequências em dois vetores independentes
valor = collect(keys(dicio))
freq = collect(values(dicio))

Gp = prod(valor .^ freq)^(1/sum(freq))