SUMÁRIO
  1. A pergunta
  2. Fontes de dados
  3. Conversão de unidades: $/MMBtu para ct/kWh
  4. Deflação para dólares constantes
  5. Marcadores históricos
  6. Código: leitura e merge dos dados
  7. Código: gráfico
  8. Como reproduzir
  9. Limitações e ressalvas
  10. Pontos frágeis desta demonstração

1. A pergunta

Como o preço residencial real da eletricidade na Califórnia se comportou de 1990 até hoje, em paralelo com a entrada agressiva de solar e eólica na matriz? A Califórnia é o estado americano que mais cedo apostou em política climática estadual: AB 1890 abriu o mercado em 1996, AB 32 instituiu o cap-and-trade em 2006, SB 100 fixou meta de 100% de eletricidade limpa até 2045. Tem hoje a maior penetração solar utility-scale dos Estados Unidos — e a tarifa residencial média mais cara do país continental.

2. Fontes de dados

Preço (nominal, residencial): EIA State Energy Data System (SEDS), série ESRCD — preço residencial de eletricidade ao consumidor, em dólares por milhão de BTU nominais, anual, todos os 50 estados, 1970-2023. eia.gov/state/seds/sep_prices/total/csv/pr_all.csv
Deflator: FRED, série CPIAUCSL (CPI-U americano, todos os itens, média anual). fred.stlouisfed.org/series/CPIAUCSL
Participação na geração: EIA, Net Generation by State by Type of Producer by Energy Source (Form 923 / 906 / 920), 1990-2024. Filtrado para "Total Electric Power Industry" e "Solar Thermal and Photovoltaic". eia.gov/electricity/data/state/annual_generation_state.xls

Os arquivos consumidos pelo script estão em Energy/Costs/data/:

  • california_price_nominal_eia.csv — preço nominal já convertido para ct/kWh, formato (year, price_ct_per_kwh_nominal)
  • usa_cpi_fred.csv — CPI americano da FRED
  • california_generation_shares_eia.csv — shares de geração, formato (year, solar_pct, wind_pct)

A SEDS publica preço uniforme desde 1970, sem mudança de metodologia — diferente de Alemanha e Reino Unido, a Califórnia não precisa de bridge visual no gráfico. A linha é contínua de 1990 a 2023.

3. Conversão de unidades: $/MMBtu para ct/kWh

A SEDS reporta o preço residencial em dólares por milhão de BTU — unidade térmica, herança das séries históricas de combustíveis. Para o gráfico, converte-se para centavos por quilowatt-hora, unidade familiar à conta de luz do consumidor americano.

1 MMBtu  =  293,0710 kWh  ⇒  ct/kWh  =  ($/MMBtu)  ×  100 / 293,0710  ≈  ($/MMBtu)  ×  0,341214

Essa conversão é determinística — não envolve estimativa nem perda de informação. O preço em ct/kWh é exatamente equivalente ao preço em $/MMBtu, só em outra unidade.

4. Deflação para dólares constantes

O preço da SEDS é nominal — em dólares do ano corrente. Para que a comparação ao longo do tempo signifique algo, é preciso remover a inflação:

Preçoreal (2020 USD)  =  Preçonominal (ano t)  ×  CPI2020  ÷  CPIt

A escolha de 2020 como ano-base é arbitrária — qualquer ano com CPI conhecido serviria, e todas as comparações relativas entre anos permanecem idênticas. O que muda com a escolha de base é apenas a magnitude absoluta do número no eixo Y.

5. Marcadores históricos

Quatro eventos ancoram a leitura política do gráfico.

AnoMarcadorO que foi
1996AB 1890Assembly Bill 1890 — primeira lei de desregulamentação do mercado elétrico estadual nos EUA. Criou o ISO e o pool atacadista, separou geração de distribuição.
2001Energy crisisCombinação de seca, tetos de preço residenciais com atacado livre e manipulação de mercado por traders (Enron) — apagões rotativos, falência da PG&E, intervenção do Estado para comprar energia diretamente.
2006AB 32Global Warming Solutions Act — instituiu meta de redução de emissões e o programa de cap-and-trade, que vincula o preço do CO2 ao preço residencial via custo das geradoras.
2018SB 100The 100 Percent Clean Energy Act — fixou meta de 100% de eletricidade vendida ao varejo vinda de fontes elegíveis (RPS) e zero-emissão até 2045.

6. Código: leitura e merge dos dados

Script completo em Energy/Costs/scripts/build_california_price.py. Trecho essencial:

from pathlib import Path
import pandas as pd

HERE = Path(__file__).parent
ROOT = HERE.parent
DATA = ROOT / "data"

BASE_YEAR = 2020

def load() -> pd.DataFrame:
    price = pd.read_csv(DATA / "california_price_nominal_eia.csv")

    cpi = pd.read_csv(DATA / "usa_cpi_fred.csv")
    cpi["year"] = pd.to_datetime(cpi["observation_date"]).dt.year
    cpi = cpi.rename(columns={"CPIAUCSL": "cpi"})[["year", "cpi"]]

    shares = pd.read_csv(DATA / "california_generation_shares_eia.csv")

    df = price.merge(cpi, on="year").merge(shares, on="year")
    base_cpi = df.loc[df["year"] == BASE_YEAR, "cpi"].iloc[0]
    df["price_ct_per_kwh_real"] = (
        df["price_ct_per_kwh_nominal"] * base_cpi / df["cpi"]
    )
    return df

A linha base_cpi = df.loc[df["year"] == BASE_YEAR, "cpi"].iloc[0] seleciona o valor do CPI no ano-base e mantém todas as outras observações relativas a ele. A coluna final price_ct_per_kwh_real é o que vai para o eixo Y.

7. Código: gráfico

import matplotlib.pyplot as plt

PLOTS = ROOT / "plots"
STYLE = ROOT.parent.parent / "vintage.mplstyle"

def save_plot(df: pd.DataFrame) -> None:
    plt.style.use(str(STYLE))
    fig, ax1 = plt.subplots(figsize=(10, 6))

    l_price, = ax1.plot(df["year"], df["price_ct_per_kwh_real"],
                        linestyle="-",  linewidth=1.6, color="black",
                        marker="o", markersize=3.5,
                        label=f"Price (real, {BASE_YEAR} USD)")

    ax1.set_ylabel(f"Residential price -- ct/kWh (real, {BASE_YEAR} USD)")
    ax1.set_xlabel("Year")
    ax1.set_ylim(15, 30)

    ax2 = ax1.twinx()
    l_solar, = ax2.plot(df["year"], df["solar_pct"],
                        linestyle="--", linewidth=1.2, color="black",
                        label="Solar share of generation")
    l_wind,  = ax2.plot(df["year"], df["wind_pct"],
                        linestyle=":",  linewidth=1.4, color="black",
                        label="Wind share of generation")
    ax2.set_ylabel("Share of electricity generation (%)")
    ax2.set_ylim(bottom=0)
    ax2.spines["right"].set_visible(True)

    y_top = 29.5
    y_mid = 23.0
    markers = [
        (1996, "AB 1890 (1996)",       y_mid),
        (2001, "Energy crisis (2001)", y_top),
        (2006, "AB 32 (2006)",         y_mid),
        (2018, "SB 100 (2018)",        y_top),
    ]
    for year, label, y in markers:
        ax1.axvline(year, color="black", linewidth=0.5,
                    linestyle="-", alpha=0.4)
        ax1.text(year, y, f" {label}",
                 fontsize=8, va="top", ha="left", style="italic")

    ax1.legend([l_price, l_solar, l_wind],
               [l.get_label() for l in (l_price, l_solar, l_wind)],
               loc="upper left", bbox_to_anchor=(0.0, 1.0),
               frameon=False, fontsize=9)

    ax1.set_title(
        "California -- real residential electricity price vs renewable share",
        loc="left", fontweight="bold"
    )

    fig.savefig(PLOTS / "california_price_vs_renewables.png",
                dpi=300, bbox_inches="tight")
    plt.close(fig)
Califórnia: preço real vs renováveis — resultado esperado
Resultado esperado. Preço real estável em torno de 18-20 ct/kWh durante os anos 1990 e 2000, com pico transitório na crise de 2001. A partir de 2010 o preço começa a subir consistentemente, em paralelo com a explosão da participação solar (linha tracejada) — que sai de quase zero em 2010 para cerca de 19% em 2023. Em 2023 o preço residencial real atinge ~25 ct/kWh, o mais alto da série. O contraste com Iowa e South Dakota (estados de alto vento, preços baixos e estáveis) dá a leitura comparativa.

8. Como reproduzir

# Pre-requisitos
pip install pandas matplotlib

# Estrutura esperada
Plotter/
+-- vintage.mplstyle
+-- Energy/
    +-- Costs/
        +-- scripts/
        |   +-- build_california_price.py
        +-- data/
        |   +-- california_price_nominal_eia.csv
        |   +-- usa_cpi_fred.csv
        |   +-- california_generation_shares_eia.csv
        +-- plots/

# Executar
cd Plotter/Energy/Costs
python scripts/build_california_price.py

# Saidas geradas:
#   data/california_electricity_real_prices.csv   (consolidado)
#   plots/california_price_vs_renewables.png

9. Limitações e ressalvas

  • Apenas residencial. A SEDS publica também tarifa comercial e industrial. A residencial é a mais relevante para o impacto político (ela vai à fatura do eleitor), mas não captura o que pagam os grandes consumidores. Indústrias intensivas em energia migraram da Califórnia para outros estados nas últimas duas décadas — sinal indireto de que a tarifa industrial seguiu rota parecida com a residencial.
  • EIA Form 923 ignora rooftop PV. O share solar mostrado no gráfico (~19% em 2023) é apenas a geração utility-scale registrada nas usinas. A geração distribuída em telhados residenciais e comerciais — fortíssima na Califórnia, com cerca de 1,8 milhão de sistemas instalados — não entra. Incluindo rooftop, a participação solar na geração total da Califórnia chega a ~25-28%.
  • Cap-and-trade adiciona um custo de carbono ao preço. Desde 2013 o programa de AB 32 cobra das geradoras um preço por tonelada de CO2 emitida, que é repassado à tarifa. Em 2023 o preço do CCA-V (California Carbon Allowance) ficou em torno de 30-35 USD/tCO2; isso adiciona aproximadamente 1,5-2 ct/kWh ao custo de uma usina de gás. O gráfico inclui esse custo dentro do preço cheio — o leitor não consegue separá-lo das demais componentes da tarifa sem dados adicionais.

10. Pontos frágeis desta demonstração

Três pontos da metodologia merecem ser explicitados antes de tomar o gráfico como veredito.

10.1 Net energy metering (NEM) é um subsídio cruzado embutido na tarifa

A Califórnia opera, desde os anos 2000, um esquema de net energy metering em que residências com painéis solares no telhado recebem da concessionária crédito pelo excedente injetado na rede a preço de varejo — não a preço de atacado. Como o varejo (~25 ct/kWh) é várias vezes maior que o atacado (~5-7 ct/kWh), cada kWh injetado por um cliente NEM é, na prática, subsidiado pelos demais clientes. Estimativas da CPUC apontam que o subsídio cruzado embutido na NEM-2.0 atingiu ~3 ct/kWh para clientes não-NEM em 2022. Ou seja: parte do aumento da tarifa visível no gráfico é o custo socializado da decisão política de favorecer geração distribuída — não é mercado.

10.2 O eixo direito mede geração interna, não o que a Califórnia consome

A linha solar e a linha eólica mostram qual fração da eletricidade gerada dentro da Califórnia veio dessas fontes. Mas a Califórnia consome cerca de 30% mais eletricidade do que gera — a diferença vem de importações: hidrelétrica do Pacífico noroeste, gás do sudoeste americano, solar excedente do Arizona em horas de pico. O leitor que olha "19% solar em 2023" e conclui que "a Califórnia consome 19% de eletricidade solar" está errado: 19% é a fração da geração feita em solo californiano. A participação solar+eólica no consumo efetivo é diferente — provavelmente menor, porque grande parte das importações é firme (hidro do PNW, gás de Arizona-Nevada).

Tem uma sugestão melhor? Se você consegue refinar essa metodologia — decompor a NEM com dados primários da CPUC, estimar a participação solar+eólica no consumo efetivo (incluindo importações) em vez de apenas na geração interna, ou propor outra forma de relacionar política e preço — escreva para statisticsreal1@gmail.com. Críticas técnicas são exatamente o que esta seção espera receber.