← All Use Cases
Central Composite Design

Garage Sale Pricing Strategy

Central composite design to maximize total revenue and minimize unsold items by tuning starting price multiplier, discount schedule, and signage count

Summary

This experiment investigates garage sale pricing strategy. Central composite design to maximize total revenue and minimize unsold items by tuning starting price multiplier, discount schedule, and signage count.

The design varies 3 factors: price multiplier (x_retail), ranging from 0.1 to 0.4, discount per hr pct (%/hr), ranging from 0 to 15, and signs (count), ranging from 2 to 10. The goal is to optimize 2 responses: revenue usd (USD) (maximize) and unsold pct (%) (minimize). Fixed conditions held constant across all runs include duration = 6hrs, items = 200.

A Central Composite Design (CCD) was selected to fit a full quadratic response surface model, including curvature and interaction effects. With 3 factors this produces 22 runs including center points and axial (star) points that extend beyond the factorial range.

Quadratic response surface models were fitted to capture potential curvature and factor interactions. The RSM contour plots below visualize how pairs of factors jointly affect each response.

Key Findings

For revenue usd, the most influential factors were discount per hr pct (38.1%), price multiplier (38.1%), signs (23.8%). The best observed value was 431.0 (at price multiplier = 0.4, discount per hr pct = 0, signs = 10).

For unsold pct, the most influential factors were discount per hr pct (43.4%), price multiplier (33.6%), signs (23.0%). The best observed value was 12.0 (at price multiplier = 0.25, discount per hr pct = 7.5, signs = -1.30297).

Recommended Next Steps

Experimental Setup

Factors

FactorLowHighUnit
price_multiplier0.10.4x_retail
discount_per_hr_pct015%/hr
signs210count

Fixed: duration = 6hrs, items = 200

Responses

ResponseDirectionUnit
revenue_usd↑ maximizeUSD
unsold_pct↓ minimize%

Configuration

use_cases/250_garage_sale_pricing/config.json
{ "metadata": { "name": "Garage Sale Pricing Strategy", "description": "Central composite design to maximize total revenue and minimize unsold items by tuning starting price multiplier, discount schedule, and signage count" }, "factors": [ { "name": "price_multiplier", "levels": [ "0.1", "0.4" ], "type": "continuous", "unit": "x_retail" }, { "name": "discount_per_hr_pct", "levels": [ "0", "15" ], "type": "continuous", "unit": "%/hr" }, { "name": "signs", "levels": [ "2", "10" ], "type": "continuous", "unit": "count" } ], "fixed_factors": { "duration": "6hrs", "items": "200" }, "responses": [ { "name": "revenue_usd", "optimize": "maximize", "unit": "USD" }, { "name": "unsold_pct", "optimize": "minimize", "unit": "%" } ], "settings": { "operation": "central_composite", "test_script": "use_cases/250_garage_sale_pricing/sim.sh" } }

Experimental Matrix

The Central Composite Design produces 22 runs. Each row is one experiment with specific factor settings.

Runprice_multiplierdiscount_per_hr_pctsigns
10.257.56
20.4010
30.1152
40.2521.19316
50.257.56
6-0.02386137.56
70.257.5-1.30297
80.257.56
90.4152
100.5238617.56
110.257.56
120.25-6.193066
130.257.56
140.1010
150.257.56
160.402
170.257.513.303
180.41510
190.257.56
200.102
210.11510
220.257.56

Step-by-Step Workflow

1

Preview the design

Terminal
$ doe info --config use_cases/250_garage_sale_pricing/config.json
2

Generate the runner script

Terminal
$ doe generate --config use_cases/250_garage_sale_pricing/config.json \ --output use_cases/250_garage_sale_pricing/results/run.sh --seed 42
3

Execute the experiments

Terminal
$ bash use_cases/250_garage_sale_pricing/results/run.sh
4

Analyze results

Terminal
$ doe analyze --config use_cases/250_garage_sale_pricing/config.json
5

Get optimization recommendations

Terminal
$ doe optimize --config use_cases/250_garage_sale_pricing/config.json
6

Multi-objective optimization

With 2 competing responses, use --multi to find the best compromise via Derringer–Suich desirability.

Terminal
$ doe optimize --config use_cases/250_garage_sale_pricing/config.json --multi
7

Generate the HTML report

Terminal
$ doe report --config use_cases/250_garage_sale_pricing/config.json \ --output use_cases/250_garage_sale_pricing/results/report.html

Features Exercised

FeatureValue
Design typecentral_composite
Factor typescontinuous (all 3)
Arg styledouble-dash
Responses2 (revenue_usd ↑, unsold_pct ↓)
Total runs22

Analysis Results

Generated from actual experiment runs using the DOE Helper Tool.

Response: revenue_usd

Top factors: discount_per_hr_pct (38.1%), price_multiplier (38.1%), signs (23.8%).

ANOVA

SourceDFSSMSFp-value
SourceDFSSMSFp-value
price_multiplier412132.27273033.06821.0310.4422
discount_per_hr_pct436707.27279176.81823.1190.0722
signs45173.85611293.46400.4400.7774
LackofFit239930.371219965.1856
PureError720595.5000
Error960525.87122942.2143
Total21114539.27275454.2511

Pareto Chart

Pareto chart for revenue_usd

Main Effects Plot

Main effects plot for revenue_usd

Normal Probability Plot of Effects

Normal probability plot for revenue_usd

Half-Normal Plot of Effects

Half-normal plot for revenue_usd

Model Diagnostics

Model diagnostics for revenue_usd

Response: unsold_pct

Top factors: discount_per_hr_pct (43.4%), price_multiplier (33.6%), signs (23.0%).

ANOVA

SourceDFSSMSFp-value
SourceDFSSMSFp-value
price_multiplier4566.4470141.61170.4550.7669
discount_per_hr_pct4541.6970135.42420.4350.7803
signs4275.197068.79920.2210.9199
LackofFit20.00000.0000
PureError72177.8750
Error92111.0227311.1250
Total213494.3636166.3983

Pareto Chart

Pareto chart for unsold_pct

Main Effects Plot

Main effects plot for unsold_pct

Normal Probability Plot of Effects

Normal probability plot for unsold_pct

Half-Normal Plot of Effects

Half-normal plot for unsold_pct

Model Diagnostics

Model diagnostics for unsold_pct

Response Surface Plots

3D surfaces fitted with quadratic RSM. Red dots are observed data points.

revenue usd discount per hr pct vs signs

RSM surface: revenue usd discount per hr pct vs signs

revenue usd price multiplier vs discount per hr pct

RSM surface: revenue usd price multiplier vs discount per hr pct

revenue usd price multiplier vs signs

RSM surface: revenue usd price multiplier vs signs

unsold pct discount per hr pct vs signs

RSM surface: unsold pct discount per hr pct vs signs

unsold pct price multiplier vs discount per hr pct

RSM surface: unsold pct price multiplier vs discount per hr pct

unsold pct price multiplier vs signs

RSM surface: unsold pct price multiplier vs signs

Multi-Objective Optimization

When responses compete, Derringer–Suich desirability finds the best compromise. Each response is scaled to a 0–1 desirability, then combined via a weighted geometric mean.

Overall Desirability
D = 0.8648

Per-Response Desirability

ResponseWeightDesirabilityPredictedDir
revenue_usd 1.5
0.8961
411.00 0.8961 411.00 USD
unsold_pct 1.0
0.8199
20.00 0.8199 20.00 %

Recommended Settings

FactorValue
price_multiplier0.4 x_retail
discount_per_hr_pct15 %/hr
signs2 count

Source: from observed run #17

Trade-off Summary

Sacrifice = how much worse than single-objective best.

ResponsePredictedBest ObservedSacrifice
unsold_pct20.0012.00+8.00

Top 3 Runs by Desirability

RunDFactor Settings
#110.7162price_multiplier=0.4, discount_per_hr_pct=0, signs=10
#190.7064price_multiplier=0.25, discount_per_hr_pct=21.1931, signs=6

Model Quality

ResponseType
unsold_pct0.4675quadratic

Full Multi-Objective Output

doe optimize --multi
============================================================ MULTI-OBJECTIVE OPTIMIZATION Method: Derringer-Suich Desirability Function ============================================================ Overall desirability: D = 0.8648 Response Weight Desirability Predicted Direction --------------------------------------------------------------------- revenue_usd 1.5 0.8961 411.00 USD ↑ unsold_pct 1.0 0.8199 20.00 % ↓ Recommended settings: price_multiplier = 0.4 x_retail discount_per_hr_pct = 15 %/hr signs = 2 count (from observed run #17) Trade-off summary: revenue_usd: 411.00 (best observed: 431.00, sacrifice: +20.00) unsold_pct: 20.00 (best observed: 12.00, sacrifice: +8.00) Model quality: revenue_usd: R² = 0.3879 (quadratic) unsold_pct: R² = 0.4675 (quadratic) Top 3 observed runs by overall desirability: 1. Run #17 (D=0.8648): price_multiplier=0.4, discount_per_hr_pct=15, signs=2 2. Run #11 (D=0.7162): price_multiplier=0.4, discount_per_hr_pct=0, signs=10 3. Run #19 (D=0.7064): price_multiplier=0.25, discount_per_hr_pct=21.1931, signs=6

Full Analysis Output

doe analyze
=== Main Effects: revenue_usd === Factor Effect Std Error % Contribution -------------------------------------------------------------- discount_per_hr_pct 120.2500 15.7455 38.1% price_multiplier 120.0000 15.7455 38.1% signs 75.0000 15.7455 23.8% === ANOVA Table: revenue_usd === Source DF SS MS F p-value ----------------------------------------------------------------------------- price_multiplier 4 12132.2727 3033.0682 1.031 0.4422 discount_per_hr_pct 4 36707.2727 9176.8182 3.119 0.0722 signs 4 5173.8561 1293.4640 0.440 0.7774 Lack of Fit 2 39930.3712 19965.1856 6.786 0.0230 Pure Error 7 20595.5000 2942.2143 Error 9 60525.8712 2942.2143 Total 21 114539.2727 5454.2511 === Summary Statistics: revenue_usd === price_multiplier: Level N Mean Std Min Max ------------------------------------------------------------ -0.0238613 1 411.0000 0.0000 411.0000 411.0000 0.1 4 291.0000 83.8491 166.0000 342.0000 0.25 12 314.2500 49.8272 237.0000 378.0000 0.4 4 312.2500 134.1700 120.0000 431.0000 0.523861 1 339.0000 0.0000 339.0000 339.0000 discount_per_hr_pct: Level N Mean Std Min Max ------------------------------------------------------------ -6.19306 1 263.0000 0.0000 263.0000 263.0000 0 4 361.7500 46.2340 336.0000 431.0000 15 4 241.5000 116.4288 120.0000 360.0000 21.1931 1 289.0000 0.0000 289.0000 289.0000 7.5 12 330.7500 52.8740 237.0000 411.0000 signs: Level N Mean Std Min Max ------------------------------------------------------------ -1.30297 1 289.0000 0.0000 289.0000 289.0000 10 4 303.2500 131.2539 120.0000 431.0000 13.303 1 364.0000 0.0000 364.0000 364.0000 2 4 300.0000 89.9926 166.0000 360.0000 6 12 322.3333 55.0922 237.0000 411.0000 === Main Effects: unsold_pct === Factor Effect Std Error % Contribution -------------------------------------------------------------- discount_per_hr_pct 24.0000 2.7502 43.4% price_multiplier 18.5833 2.7502 33.6% signs 12.7500 2.7502 23.0% === ANOVA Table: unsold_pct === Source DF SS MS F p-value ----------------------------------------------------------------------------- price_multiplier 4 566.4470 141.6117 0.455 0.7669 discount_per_hr_pct 4 541.6970 135.4242 0.435 0.7803 signs 4 275.1970 68.7992 0.221 0.9199 Lack of Fit 2 0.0000 0.0000 0.000 1.0000 Pure Error 7 2177.8750 311.1250 Error 9 2111.0227 311.1250 Total 21 3494.3636 166.3983 === Summary Statistics: unsold_pct === price_multiplier: Level N Mean Std Min Max ------------------------------------------------------------ -0.0238613 1 20.0000 0.0000 20.0000 20.0000 0.1 4 28.5000 4.3589 22.0000 31.0000 0.25 12 38.5833 15.3650 12.0000 66.0000 0.4 4 34.0000 9.5568 27.0000 48.0000 0.523861 1 31.0000 0.0000 31.0000 31.0000 discount_per_hr_pct: Level N Mean Std Min Max ------------------------------------------------------------ -6.19306 1 22.0000 0.0000 22.0000 22.0000 0 4 34.5000 9.0370 29.0000 48.0000 15 4 28.0000 4.5461 22.0000 32.0000 21.1931 1 46.0000 0.0000 46.0000 46.0000 7.5 12 37.1667 15.5086 12.0000 66.0000 signs: Level N Mean Std Min Max ------------------------------------------------------------ -1.30297 1 41.0000 0.0000 41.0000 41.0000 10 4 34.2500 9.3586 27.0000 48.0000 13.303 1 31.0000 0.0000 31.0000 31.0000 2 4 28.2500 4.3493 22.0000 32.0000 6 12 36.8333 16.2359 12.0000 66.0000

Optimization Recommendations

doe optimize
=== Optimization: revenue_usd === Direction: maximize Best observed run: #2 price_multiplier = 0.4 discount_per_hr_pct = 0 signs = 10 Value: 431.0 RSM Model (linear, R² = 0.0409, Adj R² = -0.1190): Coefficients: intercept +315.1818 price_multiplier -10.4870 discount_per_hr_pct -12.8198 signs +6.7086 RSM Model (quadratic, R² = 0.2735, Adj R² = -0.2713): Coefficients: intercept +309.2606 price_multiplier -10.4870 discount_per_hr_pct -12.8198 signs +6.7086 price_multiplier*discount_per_hr_pct -34.0000 price_multiplier*signs -10.7500 discount_per_hr_pct*signs -26.0000 price_multiplier^2 +20.8105 discount_per_hr_pct^2 -6.1894 signs^2 -5.7394 Curvature analysis: price_multiplier coef=+20.8105 convex (has a minimum) discount_per_hr_pct coef=-6.1894 concave (has a maximum) signs coef=-5.7394 concave (has a maximum) Notable interactions: price_multiplier*discount_per_hr_pct coef=-34.0000 (antagonistic) discount_per_hr_pct*signs coef=-26.0000 (antagonistic) price_multiplier*signs coef=-10.7500 (antagonistic) Predicted optimum (from linear model, at observed points): price_multiplier = 0.1 discount_per_hr_pct = 0 signs = 10 Predicted value: 345.1972 Surface optimum (via L-BFGS-B, linear model): price_multiplier = 0.1 discount_per_hr_pct = 0 signs = 10 Predicted value: 345.1972 Model quality: Weak fit — consider adding center points or using a different design. Factor importance: 1. signs (effect: 124.0, contribution: 38.8%) 2. price_multiplier (effect: 108.8, contribution: 34.0%) 3. discount_per_hr_pct (effect: 87.0, contribution: 27.2%) === Optimization: unsold_pct === Direction: minimize Best observed run: #21 price_multiplier = 0.25 discount_per_hr_pct = 7.5 signs = -1.30297 Value: 12.0 RSM Model (linear, R² = 0.0229, Adj R² = -0.1399): Coefficients: intercept +34.7273 price_multiplier -1.0171 discount_per_hr_pct +0.8796 signs +1.9116 RSM Model (quadratic, R² = 0.2032, Adj R² = -0.3944): Coefficients: intercept +36.4246 price_multiplier -1.0171 discount_per_hr_pct +0.8796 signs +1.9117 price_multiplier*discount_per_hr_pct +0.6250 price_multiplier*signs +4.1250 discount_per_hr_pct*signs -2.8750 price_multiplier^2 -1.7487 discount_per_hr_pct^2 +2.4513 signs^2 -3.2487 Curvature analysis: signs coef=-3.2487 concave (has a maximum) discount_per_hr_pct coef=+2.4513 convex (has a minimum) price_multiplier coef=-1.7487 concave (has a maximum) Notable interactions: price_multiplier*signs coef=+4.1250 (synergistic) discount_per_hr_pct*signs coef=-2.8750 (antagonistic) price_multiplier*discount_per_hr_pct coef=+0.6250 (synergistic) Predicted optimum (from linear model, at observed points): price_multiplier = 0.1 discount_per_hr_pct = 15 signs = 10 Predicted value: 38.5356 Surface optimum (via L-BFGS-B, linear model): price_multiplier = 0.4 discount_per_hr_pct = 0 signs = 2 Predicted value: 30.9189 Model quality: Weak fit — consider adding center points or using a different design. Factor importance: 1. discount_per_hr_pct (effect: 35.0, contribution: 41.7%) 2. signs (effect: 26.5, contribution: 31.5%) 3. price_multiplier (effect: 22.5, contribution: 26.8%)
← Previous: Gift Wrapping Efficiency Next: Coral Reef Fragment Restoration →