3.2. Optimality of policy targeting: simulating incentives to avoid carbon loss
In this lab, we explore how spatial heterogeneity in conservation values, threat, and costs can help us understand how different policy targeting strategies might differ in terms of their cost-effectiveness (how much of an outcome you can achieve for a given budget).
Using estimates from the previous exercise, we will explore how design features of a voluntary land protection program can affect how many avoided carbon emissions we can obtain for a given budget.
Deliverables
Map of the estimated protection costs per ton of expected avoided CO2 emissions.
Graph of the supply curve of CO2 emissions through avoided forest loss in Massachusetts.
One .csv table with expected outcome indicators of 9 (or more) policy scenarios.
Maps of parcels selected under the different scenarios.
Write-up including estimates of the relative cost and benefits (in terms of avoided carbon emissions) from different land acquisition programs aiming to reduce forest loss in Massachusetts.
Due date
Friday, Nov 7, 2025, by 6:00 p.m.
3.2.1. Understand how targeting can affect policy outcomes
Our first few policy targeting strategies will follow similar principles as those formulated in our reading:
You already reviewed the empirical estimation sections in Lab 3-1. This time, remind yourself of the problem setup, then read the sections on targeting strategies, simulations, and main findings.
Chapter |
Instructions |
|---|---|
Introduction |
Re-read to refresh your memory. |
Modeling Framework for Prioritizing Conservation Easements |
Revisit the sections where the targeting strategies (EBC, BC, and EB) are defined for the first time. You don’t have to get all of the algebra, but make sure you understand the basic targeting principles. |
Empirical Procedure
|
Re-read to refresh your memory. |
|
Read only for the framing assumptions. Our simulations will be simpler (single-time, not dynamic). |
Results and Discussion on Targeting Simulations |
Figure 1 and Table 5 contain the key findings. |
Continue the lab when you feel ready to explain Figure 1 and Table 5.
Questions
How are Cost, Benefit, and Expected Benefit defined?
How do they map to the notions of Value and Threat used in other parts of EE 508?
Which targeting strategy is found to generate the highest overall benefits for a given budget?
3.2.2. Frame the problem and analysis
Let’s keep things as simple as possible and introduce a number of simplifying assumptions in our problem framing. You can relax them later, e.g., as part of your project.
Problem framing
Suppose a group of donors (e.g., Massachusetts state agencies, companies subject to California’s cap-and-trade scheme, philanthropic donors, a student-driven initiative, …) were interested in avoiding carbon emissions from expected forest loss in Massachusetts.
Choice: the donors wish to reach their goal exclusively by placing conservation easements on properties that contain forests at risk of conversion (but that are not yet protected with an easement or park).
Objective function:
The donors’ goal is to minimize carbon emissions over a 100-year horizon.
Their discount rate is zero (i.e. they value a ton of carbon emitted in the future the same as if it were emitted today).
All purchases occur in the year for which we estimated sales prices (so we don’t have to adjust for inflation, price growth, etc.).
Estimation assumptions
We assume that the expected parcel-level rate of forest change is constant over a 100-year time horizon. In other words, we assume that the estimate of forest change for 1990-2010 can be linearly extrapolated into the future until all forest on a property is lost. We do not consider parcels that are expected to gain forest cover.
Average aboveground carbon stocks in Massachusetts are about 110t per hectare of forest (Lucy Hutyra, personal communication). We assume that all of it is lost when forest is converted. We ignore changes in other stocks. Converting C stocks to CO2 (
* 44 / 12), we get about 400t of CO2 emissions per hectare of converted forest.Our land cover change dataset underestimates forest loss by a factor of 2, as estimated against a statistical sample drawn for much of New England [1]. We assume we can apply the same correction factor to parcels located in Massachusetts without biasing the analysis.
A property can be protected in perpetuity with a conservation easement at 40% of the fair market value of acquiring the property.
This is a very rough estimate. It reflects the average % reduction in property value from ~200 conservation easement appraisals from a different state (Colorado).
The value of easements (i.e. the reduction in property value due to the additional restrictions) will vary for each property and state. Properly estimating their price effect from empirical data in the presence of many non-linear confounders is really difficult (a real-life estimation issue that has been actively exploited to create illegal tax havens).
Assessing the value of conservation easements might become easier as data on easements advances - the quasi-experimental methods that we will learn in Lab 4 might help with estimation of causal differences.
Once a property is protected (acquired or encumbered with a conservation easement), the expected risk of forest loss is reduced to zero.
There is no leakage. In other words, protecting any number of parcels will not increase the risk that other parcels will be converted.
This is a big assumption (not really true) and worthy of relaxing in a project. The reading, Newburn et al. 2006, provides some ideas for corrections.
3.2.3. Estimate parcel-level cost-benefit ratio
To make sure that results are comparable across students, we will all work with the same estimates (predictions) of expected forest change and land acquisition cost. Find them at:
USMA_parcel_predictions.parquet
Import the predictions and join them to the parcels.
Given the above assumptions, compute what percentage of each parcel is expected to change from forest to non-forest over the next 100 years (i.e. five twenty-year periods).
Account for the fact that we are likely to be underestimating forest change by a factor of 2.
Switch the sign of the estimate (make one of the multipliers negative), so forest loss is measured in positive numbers.
Clip (censor) the resulting numbers to the plausible range (i.e. no more than the forest existing in 2010 can be lost, and we ignore forest growth).
Write out the code first (on a piece of scratch paper, a note, or in your head). Then reveal the solution. Do this for all of the following steps.
Don’t skip ahead by just looking it up. If you do, you miss this first opportunity to memorize the relationships between the variables. Remembering them will be helpful when we play with policy design options.
Reveal solution
parcels['p_f_loss_pred_100yr'] = ( parcels['forestchange_pred'] .mul(-10) .clip(upper=parcels['perc_forest_2010'], lower=0) )
How many hectares of forest do we expect to be lost on each parcel?
We need to divide the percentage change by 100 (to get a value between 0 and 1) and multiply it by the parcel size:
Reveal solution
parcels['ha_f_loss_pred_100yr'] = parcels['p_f_loss_pred_100yr'] * parcels['ha'] / 100
Compute how many tons of CO2 we expect to be lost on each parcel due to conversion:
Reveal solution
parcels['tco2_loss_pred_100yr'] = parcels['ha_f_loss_pred_100yr'] * 400
Convert the predicted logged per-hectare sales price back to total parcel value in USD:
Reveal solution
parcels['acq_cost_pred_usd'] = np.exp(parcels['price_pred']) * parcels['ha']
Estimate the conservation easement cost (40% of parcel value):
Reveal solution
parcels['easement_cost_pred_usd'] = parcels['acq_cost_pred_usd'] * 0.4
Compute the conservation easement cost per ton of expected avoided CO2 emissions.
Reveal solution
parcels['easement_cost_usd_per_tco2'] = parcels['easement_cost_pred_usd'] / parcels['tco2_loss_pred_100yr']
Map the conservation easement cost per ton of expected avoided CO2 emissions.
Call
plotwith the argumentscheme='quantiles', preferrably withk=10or larger (the default equal-interval scheme will not look very informative).Exclude parcels with infinite costs (usually because of zero threat / no forest).
Remove the box and add the outline of Massachusetts. Save the map with a meaningful title as:
~/ee508/reports/lab3/2_easement_cost_usd_per_tco2.png
Take some time to explore the map
Note how the price of saving carbon emissions by avoiding forest loss varies across the state. In some areas, the price is high because the land is expensive. In others, the price is high because the risk of losing forest is low.
3.2.4. Draw the supply curve for avoided emissions
Assuming that our estimates are correct, we can construct an estimated supply curve for avoided CO2 emissions from avoided forest conversion through easements in Massachusetts.
A supply curve indicates how much of a good or service will be offered / produced at any given price. By convention, the y-axis shows the price (here: $/tCO2), and the x-axis shows the total quantity of a good obtained at that price (here: total avoided CO2 emissions in tons). We can construct a supply curve by sorting all offers from the lowest to the highest price per unit.
Go ahead and create the estimated supply curve for a price range of 0-1,000 $/tCO2:
Sort the parcels from low to high prices per ton of avoided carbon
Use
.cumsum()to create a new column that aggregates the tons of carbon avoided from the cheapest to the most expensive ton.Select all parcels that offer avoided CO2 savings at less than 1,000 $/tCO2.
Plot the graph.
You can plot the relationship of two variables with the column names
'col1'and'col2'in a DataFrameparcelsas a line withparcels.plot('col1', 'col2'). Add a title and meaningful axis labels (ax.set_xlabel(),ax.set_ylabel()). Save the plot as:~/ee508/reports/lab3/2_tco2_supply_curve.png
Find out which parcels would be reasonable for the donors to protect with conservation easements if the donors valued a ton of CO2 emissions at:
The clearing price of auctions of greenhouse gas allowances of the Regional Greenhouse Gas Initiative (RGGI), a cap-and-trade program that includes Massachusetts: about $22/tCO2eq:
The Swedish carbon tax, one of the highest in the world: $155/tCO2eq:
The Environmental Protection Agency’s last estimate of the “social cost of carbon” (SCC) under Biden, for the year 2020: $190/tCO2eq:
For the sake of simplicity, ignore all inflation between estimated sales prices and the carbon tax years. (If you want to correct for that, you’re welcome to. Just make it replicable and flag it in your writeup.)
For each carbon price, compute and note the following outcome variables:
how many parcels (count) would be reasonable to protect (
n)the total area of those parcels in hectares (
ha_pc)the total area of avoided forest loss in hectares (
ha_loss_avoided)the total CO2 emissions saved in tCO2 (
tco2_avoided)the total cost for the conservation easements in $, assuming that the indicated price is paid (
budget)the average cost per tCO2 saved in $/tCO2 (
avg_usd_per_tco2)
Tip
For this exercise and the following, it will be useful to write a code snippet that prints (or writes to .csv) these six values automatically for any selection of parcels. That will save you time when you change the selection.
Summarize the values of each of the three prices in a .csv file with the following structure. We will add more scenarios to it later. Save it as:
~/ee508/reports/lab3/2_policy_scenario_outcomes.csv
Scenario |
n |
ha_pc |
ha_loss_avoided |
tco2_avoided |
budget |
avg_usd_per_tco2 |
|---|---|---|---|---|---|---|
$22/t |
||||||
$155/t |
||||||
$190/t |
||||||
scenario_1 |
||||||
… |
3.2.5. Model the implications of policy design choices
We will now explore the implications of different policy design choices on potential policy outcomes. Specifically, we will calculate how much tons of carbon dioxide equivalents we can avoid with a fixed budget under different policy design choices. We keep our simplifying assumptions (including the assumption that our estimates are correct!), but add a few more important ones:
Let’s assume the policy maker has a budget of $125 million. They cannot spend a cent more.
BUDGET = 125000000
The policy maker can reach every single landowner and inform them about the policy.
There are no transaction costs.
Scenario 5 will relax this assumption.
Every landowner is willing to put an easement on their property if offered the indicated price.
Scenario 6 will relax this assumption.
Only entire parcels can be protected (not only certain parts, e.g. forest).
An efficient way to go through this exercise is to create, for each scenario, a boolean Series - is_selected - that identifies all parcels that will be protected in that scenario (i.e., it is True for all parcels that will be selected for protection). The task thus becomes to find that Series for each scenario. Once you have found is_selected, you can compute the six above outcome values very quickly with the same code snippet.
For each scenario:
Save the six outcome indicators listed above in your table (under the name
scenario_1,scenario_2, etc.)~/ee508/reports/lab3/2_policy_scenario_outcomes.csv
Create a map of the selected parcels.
A quick way to do this is to plot the points (
parcel_centroids) withmarkersize='ms_large'(the points are on the small side if you use'ms'). Plot all parcels with the same color andalpha=0.5to see overlapping parcels. Add the outline of Massachusetts. Save the map for each scenario as:~/ee508/reports/lab3/2_selected_parcels_scenario_X.png
Where X is the respective scenario number.
Ready to roll? Let’s go.
Here are our six policy targeting scenarios and modeling approaches:
3.2.5.1. Scenario 1: Optimal allocation
This scenario assumes that all of our estimates are correct, and that the landowner will accept any deal at (or above) the estimated easement cost (i.e., we perfectly estimated the price at which they’re willing to accept the offer).
The policy maker can therefore offer exactly that amount to each landowner whose forests they want to preserve, and every landowner will voluntarily accept such a deal.
The policy maker selects the parcels with the lowest cost-benefit ratio (easement_cost_usd_per_tco2) - or highest benefit-cost ratio - until the budget is exhausted.
You can implement this as follows:
Sort the parcels by their cost-benefit ratio (lowest on top).
Use
.cumsum()(cumulative sum) to create a new column that gives you the cumulative expense, starting with the top row:'easement_cost_pred_usd_sum'.Use
is_selectedto identify all parcels whose values in'easement_cost_pred_usd_sum'are below the fixed budget:Reveal solution
is_selected = parcels['easement_cost_pred_usd_sum'].le(BUDGET)
Go ahead, compute & save the values, and create the map.
3.2.5.2. Scenario 2: Panic buying
The policy maker offers payments only to the most threatened parcels (starting with the lowest forestchange_pred value) until the budget is exhausted. Only parcels with forest cover in 2010 are eligible. As before, payment is based on the estimated easement costs.
Note that this means you’ll have to remove ineligible parcels before applying
.cumsum().
3.2.5.3. Scenario 3: Forest flat rate
The policy maker offers every landowner a fixed payment for each hectare of forest protected by an easement. Landowners will participate if the offered payment is higher than the cost of the easement. For simplicity, only entire parcels (all forests) can be protected, and the forest area on a parcel in 2010 is used as the basis of payment.
You will need to find the right per-hectare price that will have enough landowners participate to stay just under the budget. For simplicity, find the multiple of $10/ha (e.g., $2,860/ha, $2,870/ha, etc.) for which this condition holds true. You can do this iteratively: set a value, predict enrollment and budget, and adapt your price depending on the result. Start with large steps (e.g. $1000 vs. $5000), then narrow down.
Tip
perc_forest_2010 is given as a percentage (0-100).
The payment offered to the landowners is now based on the per-hectare price, not on the cost of the easement!
3.2.5.4. Scenario 4: Carbon flat rate
The policy maker offers landowners a fixed payment for each ton of estimated avoided carbon emissions. Landowners participate if the offered payment is higher than the cost of the easement. As before, only entire parcels can be protected.
Find the level of the fixed payment per tons of estimated carbon emissions (highest integer value, no fractions) for which enrollment stays just under the budget.
Once more, payments to landowners are not determined by the estimated easement cost.
3.2.5.5. Scenario 5: Transaction costs
Based on Scenario 1 and its assumptions, consider the fact that protection transactions are not without cost. Instead, assume that each easement transaction costs $45,000 per parcel.
I found this to be the average self-reported transaction cost for 600 conservation easements transactions conducted by Great Outdoors Colorado, the state-financed easement acquisition program.
How do outcomes change?
Tip
Make sure to include the transaction costs in the total budget computation and the average cost / tCO2eq.
3.2.5.6. Scenario 6: Prediction errors
Start with Scenario 1, but assume that the policy maker made mistakes in predicting the minimum price at which landowners would be willing to conserve their land (willingness to accept, or short: WTA).
This could be for multiple reasons: many landowners might be unwilling to protect their land at fair market value because they have other plans for it, or simply don’t want a land trust or government to monitor them.
On the other hand, some landowners might be willing to protect their land for less. Given our data, we don’t know the landowner’s preferences, but we can model what implications such errors in the prediction can have for policy results.
Create a new column, 'price_pred_wta', which adds random noise to the predicted mean (with a standard deviation of 0.25), and increases the average a little (which makes the average landowners have a slight preference against sharing their property rights with someone else).
random_noise = np.random.normal(scale=0.25, size=len(parcels))
parcels['price_pred_wta'] = parcels['price_pred'] + random_noise + 0.1
Suppose the policy maker sends an offer to each landowner, starting with those who will be (according to the knowledge of the policy maker) the most cost-efficient in providing carbon emission reductions. The policy maker offers payment in exchange for protection based on the estimated cost of the conservation easements. So far, that’s just Scenario 1.
However, the landowner will only accept if their actual (here: random) WTA is lower than the offer. In this case, the transaction occurs at the price proposed by the policy maker. Otherwise, they will reject and the parcel will not get protected. This continues until the budget is exhausted.
Make sure all your results are saved in
2_policy_scenario_outcomes.csv
and that you have a map for each scenario.
3.2.6. Write up your findings
Write up a short summary (800-1200 words), addressing these questions:
How do Scenarios 1-6 differ in how much carbon emissions we estimate we can reduce for a given budget?
Why do you think we observe these differences? Explain each case.
Overall, what insights (if any) did you have about policy design, specifically avoiding carbon emissions through voluntary long-term forest protection (and assuming, of course, that our assumptions did not lead us astray too much). Or, more pointedly, what should policy makers do if they wanted to maximize avoided carbon emissions for a given budget?
Make sure to distinguish between:
modeling decisions that are policy design choices
modeling decisions that attempt to improve our model of reality (measures or modeling approach)
How realistic and feasible do you think each of stylized policy scenarios are (consider implementing them in practice)?
What caveats do you think there are to this analysis?
How would you improve the analysis if you were hired by a donor to do so?
There’s no need to overthink this. Don’t use more than 30min on this.
Save the document as:
~/ee508/reports/lab3/2_policy_scenario_reflections.docx
3.2.7. Improve the scenarios (optional)
The above scenarios, as any model, are simplified and idealized version of reality, developed to illustrate the relevance of different pieces of the policy design puzzle. Making these scenarios more realistic is an important task for those interested in informing public policy decisions.
You can gain up to 15% of credits on this lab if you create a new, more realistic simulation of a proposed policy intervention that you could actually conceive of being implemented in Massachusetts.
Some of the options to add more realism / complexity include:
Combining the different issues showcased above into a new scenario.
Thinking more rigorously about how implementation would actually happen in practice, what practical problems public policy makers might encounter, and model how that might affect cost and participation (e.g. how to reach landowners, how to make offers, etc.).
Relaxing any other assumptions. For inspiration, re-read the long list of assumptions in the problem framing.
Students developing additionals scenarios and including them in their writeup can gain up to 15% of credits. Credit will be allocated as a function of the extent to which the innovation enhances the realism of the scenarios or highlights policy design issues.
Last not least: according to my knowledge, there is no published work on this topic. If you are interested in using this approach and analysis to develop a peer-reviewed journal article (the currency of the academic world), feel free to mention it in your writeup.
3.2.8. Wrap up
Make sure your ~/ee508/reports/lab3/ directory includes all of the following:
2_easement_cost_usd_per_tco2.png2_policy_scenario_outcomes.csv2_policy_scenario_reflections.docx2_selected_parcels_scenario_1.png2_selected_parcels_scenario_2.png2_selected_parcels_scenario_3.png2_selected_parcels_scenario_4.png2_selected_parcels_scenario_5.png2_selected_parcels_scenario_6.png2_tco2_supply_curve.png
Congratulations!
After you learned how to use linear regression and machine learning models to explain and predict outcomes of interest, you used (part of) that information to examine how different policy design choices lead to different results in terms of the cost-effectiveness of conservation projects.
But we’ve only scratched the surface.
You can go into more detail as part of your Individual project.
How Newburn led to openplaces
In 2016, when I was a postdoc at Stanford University, I wrote David Newburn’s and asked whether he’d be open to share his Sonoma county data with me. Unfortunately, the data was not recuperable at the time.
“I have not even looked at the Sonoma dataset for at least 5-10 years after publishing the papers. It’s not something I could just send because much of it lives on a GIS server at UC Berkeley, and I do not even have access to it. It is also somewhat out of date since it had development from 1990 to 2002. I would recommend that you try to build the same type of data set elsewhere. […] There are several data sets that would need to be integrated, many of which I’m not even sure where they are located on the server. I suggest you create your own data elsewhere. [It] is not as simple as sending you a single data set.””
You could say that this experience - the observation that all the labor poured into developing feature-rich parcel datasets can be easily lost to time - sparked the idea for places and then openplaces: open-source software systems to create, maintain, and archive parcel datasets for the benefit of replicable research.
Project idea
Would you perhaps interested in updating Newburn’s analysis for Sonoma county for the 2002 - 2024 timeframe? You could explore where and how targeting ultimatively occurred, and whether the recommendations and models held up.