cassionData Analysis

Lesson 6 of 8

Unit · The market is an outcome too

The goat that lost 62% of its value while its price fell 18%

A day's casual labour bought 4.82 kg of maize at the 2023 harvest and 2.48 kg at the 2024 lean peak. A goat bought 69.4 kg and then 26.7. Neither the wage series nor the goat series shows that, because it is a ratio.

PythonR135 minIntegrated Food Security Phase Classification (IPC)Sphere StandardsCore Humanitarian Standard (CHS)

A price is a number about a market, not about a household

Maize at 159 gourdes a kilogram tells you nothing about whether anyone can buy it. That question needs the other side of the transaction: what the household has to sell, or to earn, in order to buy.

Terms of trade are that ratio, expressed in the units the household thinks in.

import pandas as pd

prices = pd.read_csv("market-prices-2024.v1.csv")
clean = prices[(prices["price_htg"] >= 10) &
               ~((prices["commodity"] == "maize") &
                 (prices["market_id"] == "MK005"))]

series = clean.pivot_table(index="period", columns="commodity",
                           values="price_htg", aggfunc="median")

series["wage_to_maize"] = series["daily-wage-casual-labour"] / series["maize"]
series["goat_to_maize"] = series["goat"] / series["maize"]
print(series[["maize", "daily-wage-casual-labour", "goat",
              "wage_to_maize", "goat_to_maize"]].round(2))
library(dplyr)

prices |>
  filter(price_htg >= 10, !(commodity == "maize" & market_id == "MK005")) |>
  summarise(price = median(price_htg), .by = c(period, commodity)) |>
  tidyr::pivot_wider(names_from = commodity, values_from = price) |>
  mutate(wage_to_maize = `daily-wage-casual-labour` / maize,
         goat_to_maize = goat / maize)
Month Maize Wage Goat Wage → kg maize Goat → kg maize
Dec 2023 74.9 361.3 5,195 4.82 69.4
Jul 2023 130.1 368.9 4,332 2.84 33.3
Dec 2024 81.4 388.5 5,900 4.77 72.5
Jul 2024 159.3 395.6 4,254 2.48 26.7

What the wage series alone would have told you

The daily wage rose 10% over two years, from 361 to 396 gourdes. Read on its own, that is stability, perhaps mild improvement.

A day’s work bought 4.82 kg of maize at the 2023 harvest and 2.48 kg at the 2024 lean peak — a 49% fall in purchasing power while the wage went up.

wage = series["wage_to_maize"]
print(f"wage rose {series['daily-wage-casual-labour']['2024-07'] / series['daily-wage-casual-labour']['2023-12'] - 1:+.1%}")
print(f"purchasing power fell {wage['2024-07'] / wage['2023-12'] - 1:+.1%}")
# One number goes up, the other goes down, and they are the same households.

This is the single most useful ratio in a food security analysis of a labour-dependent population, and it takes two columns and a division.

What the goat series alone would have told you

Worse, because the goat price moves the wrong way.

Livestock prices fall during the lean season: everyone is selling at once, the animals are in poor condition, and buyers know both. So a pastoral or agro-pastoral household faces rising cereal prices and falling livestock prices at the same moment.

goat = series["goat_to_maize"]
print(f"goat price change: "
      f"{series['goat']['2024-07'] / series['goat']['2023-12'] - 1:+.1%}")
print(f"goat terms of trade: {goat['2024-07'] / goat['2023-12'] - 1:+.1%}")
# -18% and -62%. The second is the one the household experiences.

The goat price fell 18%. The goat’s purchasing power fell 62%. A herder who sold one goat for 69 kg of maize in December 2023 needed to sell two and a half goats for the same maize at the 2024 peak — which is exactly the mechanism by which a herd disappears in one bad year.

Neither series shows that. The maize series shows a price rise; the goat series shows a modest price fall; only the ratio shows a collapse.

The three ratios worth computing

Ratio Whose access it describes Read it against
Wage to staple Casual labourers, 26.7% of these households Kilograms per day worked
Livestock to staple Livestock-dependent households, 7.8% here Kilograms per animal
Cash-crop to staple Farmers selling one crop and buying another, 29.5% subsistence here Kilograms per kilogram
livelihoods = pd.read_csv("food-security-survey-2024.v1.csv")["main_livelihood"]
print(livelihoods.value_counts(normalize=True).round(3))
survey |> count(main_livelihood) |> mutate(share = n / sum(n)) |> arrange(-share)

Compute the ratio that matches the livelihood you are analysing. A wage-to- cereal figure describes nothing about a household living on remittances, and the survey’s main_livelihood column is what tells you which ratio belongs to which group and how many people are in it.

Two warnings

Terms of trade are not a welfare measure. They say how much food a unit of income or of assets buys. They say nothing about how many units the household has, and a household with no goats is unaffected by a goat-to-maize collapse and may be worse off than one that has them.

The denominator has to be the staple people actually eat. Rice is imported here and moves with the exchange rate rather than the harvest; maize is local and moves with the season. A terms-of-trade series built on rice would show a much flatter picture and would be describing a different household.

series["wage_to_rice"] = (series["daily-wage-casual-labour"]
                          / series["rice-imported"])
print(series[["wage_to_maize", "wage_to_rice"]].loc[
    ["2023-12", "2023-07", "2024-12", "2024-07"]].round(2))
# Two staples, two stories. Say which one the population eats.

Report the ratio, not just the prices

Terms of trade, median across a balanced panel of 10 markets

                          Dec 2023   Jul 2024   Change
  Maize, HTG/kg               74.9      159.3    +113%
  Casual wage, HTG/day       361.3      395.6     +10%
  Goat, HTG/head           5,195.1    4,254.4     -18%

  Wage buys, kg maize          4.82       2.48     -49%
  Goat buys, kg maize          69.4       26.7     -62%

  Terms of trade are computed on maize, the local staple. On imported rice
  the wage ratio falls 29% over the same period rather than 49%. 34.5% of
  surveyed households depend on casual labour or livestock as their main
  livelihood; a further 29.5% on subsistence farming.

The last line is what turns a market table into an analysis. The ratio matters in proportion to how many households live on that side of it, and that number comes from the household survey rather than from the price file.

What comes next

You now have four household indicators and two market ratios, from two independent sources, all pointing at the same lean season. The last unit is what an IPC analysis does with them — and why the answer is a table rather than a formula.

Teach this lesson

The lesson as a slide deck, with the prose kept in the speaker notes rather than on the slide. Generated from this page, so it cannot fall out of step with it.

Start the slideshowRead the slides

The PDF needs no software and projects from any machine. The PowerPoint file is there to be edited — add your organisation's branding, cut a section for a shorter session, or merge two lessons into a workshop.