← All Use Cases
🛡
Fractional Factorial Design

Zero Trust Policy Evaluation

Fractional factorial of 5 zero trust parameters for auth latency and security score

Summary

This experiment investigates zero trust policy evaluation. Fractional factorial of 5 zero trust parameters for auth latency and security score.

The design varies 5 factors: policy cache ttl (sec), ranging from 10 to 300, context attributes (count), ranging from 3 to 12, risk score weight (weight), ranging from 0.1 to 0.9, session timeout (sec), ranging from 300 to 3600, and mfa frequency (hours), ranging from 1 to 24. The goal is to optimize 2 responses: auth latency ms (ms) (minimize) and security score (score) (maximize). Fixed conditions held constant across all runs include identity provider = okta, policy engine = opa.

A fractional factorial design reduces the number of runs from 32 to 8 by deliberately confounding higher-order interactions. This is ideal for screening — identifying which of the 5 factors matter most before investing in a full study.

Key Findings

For auth latency ms, the most influential factors were mfa frequency (44.5%), session timeout (18.8%), policy cache ttl (13.2%). The best observed value was 3.8 (at policy cache ttl = 300, context attributes = 3, risk score weight = 0.1).

For security score, the most influential factors were session timeout (28.4%), context attributes (26.4%), mfa frequency (17.6%). The best observed value was 99.4 (at policy cache ttl = 300, context attributes = 12, risk score weight = 0.1).

Recommended Next Steps

Experimental Setup

Factors

FactorLowHighUnit
policy_cache_ttl10300sec
context_attributes312count
risk_score_weight0.10.9weight
session_timeout3003600sec
mfa_frequency124hours

Fixed: identity_provider = okta, policy_engine = opa

Responses

ResponseDirectionUnit
auth_latency_ms↓ minimizems
security_score↑ maximizescore

Configuration

use_cases/61_zero_trust_policy_eval/config.json
{ "metadata": { "name": "Zero Trust Policy Evaluation", "description": "Fractional factorial of 5 zero trust parameters for auth latency and security score" }, "factors": [ { "name": "policy_cache_ttl", "levels": [ "10", "300" ], "type": "continuous", "unit": "sec" }, { "name": "context_attributes", "levels": [ "3", "12" ], "type": "continuous", "unit": "count" }, { "name": "risk_score_weight", "levels": [ "0.1", "0.9" ], "type": "continuous", "unit": "weight" }, { "name": "session_timeout", "levels": [ "300", "3600" ], "type": "continuous", "unit": "sec" }, { "name": "mfa_frequency", "levels": [ "1", "24" ], "type": "continuous", "unit": "hours" } ], "fixed_factors": { "identity_provider": "okta", "policy_engine": "opa" }, "responses": [ { "name": "auth_latency_ms", "optimize": "minimize", "unit": "ms" }, { "name": "security_score", "optimize": "maximize", "unit": "score" } ], "settings": { "operation": "fractional_factorial", "test_script": "use_cases/61_zero_trust_policy_eval/sim.sh" } }

Experimental Matrix

The Fractional Factorial Design produces 8 runs. Each row is one experiment with specific factor settings.

Runpolicy_cache_ttlcontext_attributesrisk_score_weightsession_timeoutmfa_frequency
110120.93001
230030.13001
3300120.136001
4300120.9360024
510120.130024
630030.930024
71030.1360024
81030.936001

Step-by-Step Workflow

1

Preview the design

Terminal
$ doe info --config use_cases/61_zero_trust_policy_eval/config.json
2

Generate the runner script

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

Execute the experiments

Terminal
$ bash use_cases/61_zero_trust_policy_eval/results/run.sh
4

Analyze results

Terminal
$ doe analyze --config use_cases/61_zero_trust_policy_eval/config.json
5

Get optimization recommendations

Terminal
$ doe optimize --config use_cases/61_zero_trust_policy_eval/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/61_zero_trust_policy_eval/config.json --multi
7

Generate the HTML report

Terminal
$ doe report --config use_cases/61_zero_trust_policy_eval/config.json \ --output use_cases/61_zero_trust_policy_eval/results/report.html

Features Exercised

FeatureValue
Design typefractional_factorial
Factor typescontinuous (all 5)
Arg styledouble-dash
Responses2 (auth_latency_ms ↓, security_score ↑)
Total runs8

Analysis Results

Generated from actual experiment runs using the DOE Helper Tool.

Response: auth_latency_ms

Top factors: mfa_frequency (44.5%), session_timeout (18.8%), policy_cache_ttl (13.2%).

ANOVA

SourceDFSSMSFp-value
SourceDFSSMSFp-value
policy_cache_ttl198.701398.70130.6670.4513
context_attributes193.161293.16120.6290.4636
risk_score_weight165.551365.55130.4430.5353
session_timeout1201.0013201.00131.3580.2965
mfa_frequency11125.75131125.75137.6040.0400
policy_cache_ttl*context_attributes1201.0013201.00131.3580.2965
policy_cache_ttl*risk_score_weight11125.75131125.75137.6040.0400
policy_cache_ttl*session_timeout193.161293.16120.6290.4636
policy_cache_ttl*mfa_frequency165.551265.55120.4430.5353
context_attributes*risk_score_weight167.861367.86130.4580.5284
context_attributes*session_timeout198.701398.70130.6670.4513
context_attributes*mfa_frequency1114.7613114.76130.7750.4189
risk_score_weight*session_timeout1114.7612114.76120.7750.4189
risk_score_weight*mfa_frequency198.701298.70120.6670.4513
session_timeout*mfa_frequency167.861267.86120.4580.5284
Error(LenthPSE)5740.2594148.0519
Total71766.7887252.3984

Pareto Chart

Pareto chart for auth_latency_ms

Main Effects Plot

Main effects plot for auth_latency_ms

Normal Probability Plot of Effects

Normal probability plot for auth_latency_ms

Half-Normal Plot of Effects

Half-normal plot for auth_latency_ms

Model Diagnostics

Model diagnostics for auth_latency_ms

Response: security_score

Top factors: session_timeout (28.4%), context_attributes (26.4%), mfa_frequency (17.6%).

ANOVA

SourceDFSSMSFp-value
SourceDFSSMSFp-value
policy_cache_ttl154.601354.60130.5650.4861
context_attributes1145.3513145.35131.5040.2746
risk_score_weight127.011227.01120.2800.6196
session_timeout1168.3612168.36121.7430.2440
mfa_frequency164.411264.41120.6670.4513
policy_cache_ttl*context_attributes1168.3613168.36131.7430.2440
policy_cache_ttl*risk_score_weight164.411364.41130.6670.4513
policy_cache_ttl*session_timeout1145.3513145.35131.5040.2746
policy_cache_ttl*mfa_frequency127.011327.01130.2800.6196
context_attributes*risk_score_weight1576.3012576.30125.9650.0585
context_attributes*session_timeout154.601354.60130.5650.4861
context_attributes*mfa_frequency1526.5013526.50135.4490.0668
risk_score_weight*session_timeout1526.5013526.50135.4490.0668
risk_score_weight*mfa_frequency154.601354.60130.5650.4861
session_timeout*mfa_frequency1576.3013576.30135.9650.0585
Error(LenthPSE)5483.084496.6169
Total71562.5388223.2198

Pareto Chart

Pareto chart for security_score

Main Effects Plot

Main effects plot for security_score

Normal Probability Plot of Effects

Normal probability plot for security_score

Half-Normal Plot of Effects

Half-normal plot for security_score

Model Diagnostics

Model diagnostics for security_score

Response Surface Plots

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

auth latency ms context attributes vs mfa frequency

RSM surface: auth latency ms context attributes vs mfa frequency

auth latency ms context attributes vs risk score weight

RSM surface: auth latency ms context attributes vs risk score weight

auth latency ms context attributes vs session timeout

RSM surface: auth latency ms context attributes vs session timeout

auth latency ms policy cache ttl vs context attributes

RSM surface: auth latency ms policy cache ttl vs context attributes

auth latency ms policy cache ttl vs mfa frequency

RSM surface: auth latency ms policy cache ttl vs mfa frequency

auth latency ms policy cache ttl vs risk score weight

RSM surface: auth latency ms policy cache ttl vs risk score weight

auth latency ms policy cache ttl vs session timeout

RSM surface: auth latency ms policy cache ttl vs session timeout

auth latency ms risk score weight vs mfa frequency

RSM surface: auth latency ms risk score weight vs mfa frequency

auth latency ms risk score weight vs session timeout

RSM surface: auth latency ms risk score weight vs session timeout

auth latency ms session timeout vs mfa frequency

RSM surface: auth latency ms session timeout vs mfa frequency

security score context attributes vs mfa frequency

RSM surface: security score context attributes vs mfa frequency

security score context attributes vs risk score weight

RSM surface: security score context attributes vs risk score weight

security score context attributes vs session timeout

RSM surface: security score context attributes vs session timeout

security score policy cache ttl vs context attributes

RSM surface: security score policy cache ttl vs context attributes

security score policy cache ttl vs mfa frequency

RSM surface: security score policy cache ttl vs mfa frequency

security score policy cache ttl vs risk score weight

RSM surface: security score policy cache ttl vs risk score weight

security score policy cache ttl vs session timeout

RSM surface: security score policy cache ttl vs session timeout

security score risk score weight vs mfa frequency

RSM surface: security score risk score weight vs mfa frequency

security score risk score weight vs session timeout

RSM surface: security score risk score weight vs session timeout

security score session timeout vs mfa frequency

RSM surface: security score session timeout vs mfa frequency

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.6991

Per-Response Desirability

ResponseWeightDesirabilityPredictedDir
auth_latency_ms 1.0
0.6582
18.90 0.6582 18.90 ms
security_score 2.0
0.7206
86.30 0.7206 86.30 score

Recommended Settings

FactorValue
policy_cache_ttl288.3 sec
context_attributes11.28 count
risk_score_weight0.1105 weight
session_timeout2136 sec
mfa_frequency23.15 hours

Source: from RSM model prediction

Trade-off Summary

Sacrifice = how much worse than single-objective best.

ResponsePredictedBest ObservedSacrifice
security_score86.3099.40+13.10

Top 3 Runs by Desirability

RunDFactor Settings
#40.4587policy_cache_ttl=300, context_attributes=3, risk_score_weight=0.9, session_timeout=300, mfa_frequency=24
#10.4535policy_cache_ttl=300, context_attributes=12, risk_score_weight=0.9, session_timeout=3600, mfa_frequency=24

Model Quality

ResponseType
security_score0.8790linear

Full Multi-Objective Output

doe optimize --multi
============================================================ MULTI-OBJECTIVE OPTIMIZATION Method: Derringer-Suich Desirability Function ============================================================ Overall desirability: D = 0.6991 Response Weight Desirability Predicted Direction --------------------------------------------------------------------- auth_latency_ms 1.0 0.6582 18.90 ms ↓ security_score 2.0 0.7206 86.30 score ↑ Recommended settings: policy_cache_ttl = 288.3 sec context_attributes = 11.28 count risk_score_weight = 0.1105 weight session_timeout = 2136 sec mfa_frequency = 23.15 hours (from RSM model prediction) Trade-off summary: auth_latency_ms: 18.90 (best observed: 3.80, sacrifice: +15.10) security_score: 86.30 (best observed: 99.40, sacrifice: +13.10) Model quality: auth_latency_ms: R² = 0.8640 (linear) security_score: R² = 0.8790 (linear) Top 3 observed runs by overall desirability: 1. Run #8 (D=0.5226): policy_cache_ttl=10, context_attributes=12, risk_score_weight=0.1, session_timeout=300, mfa_frequency=24 2. Run #4 (D=0.4587): policy_cache_ttl=300, context_attributes=3, risk_score_weight=0.9, session_timeout=300, mfa_frequency=24 3. Run #1 (D=0.4535): policy_cache_ttl=300, context_attributes=12, risk_score_weight=0.9, session_timeout=3600, mfa_frequency=24

Full Analysis Output

doe analyze
=== Main Effects: auth_latency_ms === Factor Effect Std Error % Contribution -------------------------------------------------------------- mfa_frequency -23.7250 5.6169 44.5% session_timeout -10.0250 5.6169 18.8% policy_cache_ttl 7.0250 5.6169 13.2% context_attributes -6.8250 5.6169 12.8% risk_score_weight 5.7250 5.6169 10.7% === ANOVA Table: auth_latency_ms === Source DF SS MS F p-value ----------------------------------------------------------------------------- policy_cache_ttl 1 98.7013 98.7013 0.667 0.4513 context_attributes 1 93.1612 93.1612 0.629 0.4636 risk_score_weight 1 65.5513 65.5513 0.443 0.5353 session_timeout 1 201.0013 201.0013 1.358 0.2965 mfa_frequency 1 1125.7513 1125.7513 7.604 0.0400 policy_cache_ttl*context_attributes 1 201.0013 201.0013 1.358 0.2965 policy_cache_ttl*risk_score_weight 1 1125.7513 1125.7513 7.604 0.0400 policy_cache_ttl*session_timeout 1 93.1612 93.1612 0.629 0.4636 policy_cache_ttl*mfa_frequency 1 65.5512 65.5512 0.443 0.5353 context_attributes*risk_score_weight 1 67.8613 67.8613 0.458 0.5284 context_attributes*session_timeout 1 98.7013 98.7013 0.667 0.4513 context_attributes*mfa_frequency 1 114.7613 114.7613 0.775 0.4189 risk_score_weight*session_timeout 1 114.7612 114.7612 0.775 0.4189 risk_score_weight*mfa_frequency 1 98.7012 98.7012 0.667 0.4513 session_timeout*mfa_frequency 1 67.8612 67.8612 0.458 0.5284 Error (Lenth PSE) 5 740.2594 148.0519 Total 7 1766.7887 252.3984 Note: Error estimated using Lenth's pseudo-standard-error (unreplicated design) === Interaction Effects: auth_latency_ms === Factor A Factor B Interaction % Contribution ------------------------------------------------------------------------ policy_cache_ttl risk_score_weight -23.7250 27.2% policy_cache_ttl context_attributes 10.0250 11.5% context_attributes mfa_frequency 7.5750 8.7% risk_score_weight session_timeout -7.5750 8.7% context_attributes session_timeout -7.0250 8.1% risk_score_weight mfa_frequency 7.0250 8.1% policy_cache_ttl session_timeout 6.8250 7.8% context_attributes risk_score_weight 5.8250 6.7% session_timeout mfa_frequency -5.8250 6.7% policy_cache_ttl mfa_frequency 5.7250 6.6% === Summary Statistics: auth_latency_ms === policy_cache_ttl: Level N Mean Std Min Max ------------------------------------------------------------ 10 4 26.0750 19.6154 3.8000 50.1000 300 4 33.1000 13.0869 15.8000 47.2000 context_attributes: Level N Mean Std Min Max ------------------------------------------------------------ 12 4 33.0000 18.1540 15.8000 50.1000 3 4 26.1750 15.1099 3.8000 37.0000 risk_score_weight: Level N Mean Std Min Max ------------------------------------------------------------ 0.1 4 26.7250 19.2491 3.8000 47.2000 0.9 4 32.4500 14.0196 15.8000 50.1000 session_timeout: Level N Mean Std Min Max ------------------------------------------------------------ 300 4 34.6000 12.8756 18.9000 50.1000 3600 4 24.5750 18.8719 3.8000 47.2000 mfa_frequency: Level N Mean Std Min Max ------------------------------------------------------------ 1 4 41.4500 8.6927 31.5000 50.1000 24 4 17.7250 11.7523 3.8000 32.4000 === Main Effects: security_score === Factor Effect Std Error % Contribution -------------------------------------------------------------- session_timeout 9.1750 5.2823 28.4% context_attributes -8.5250 5.2823 26.4% mfa_frequency -5.6750 5.2823 17.6% policy_cache_ttl 5.2250 5.2823 16.2% risk_score_weight 3.6750 5.2823 11.4% === ANOVA Table: security_score === Source DF SS MS F p-value ----------------------------------------------------------------------------- policy_cache_ttl 1 54.6013 54.6013 0.565 0.4861 context_attributes 1 145.3513 145.3513 1.504 0.2746 risk_score_weight 1 27.0112 27.0112 0.280 0.6196 session_timeout 1 168.3612 168.3612 1.743 0.2440 mfa_frequency 1 64.4112 64.4112 0.667 0.4513 policy_cache_ttl*context_attributes 1 168.3613 168.3613 1.743 0.2440 policy_cache_ttl*risk_score_weight 1 64.4113 64.4113 0.667 0.4513 policy_cache_ttl*session_timeout 1 145.3513 145.3513 1.504 0.2746 policy_cache_ttl*mfa_frequency 1 27.0113 27.0113 0.280 0.6196 context_attributes*risk_score_weight 1 576.3012 576.3012 5.965 0.0585 context_attributes*session_timeout 1 54.6013 54.6013 0.565 0.4861 context_attributes*mfa_frequency 1 526.5013 526.5013 5.449 0.0668 risk_score_weight*session_timeout 1 526.5013 526.5013 5.449 0.0668 risk_score_weight*mfa_frequency 1 54.6013 54.6013 0.565 0.4861 session_timeout*mfa_frequency 1 576.3013 576.3013 5.965 0.0585 Error (Lenth PSE) 5 483.0844 96.6169 Total 7 1562.5388 223.2198 Note: Error estimated using Lenth's pseudo-standard-error (unreplicated design) === Interaction Effects: security_score === Factor A Factor B Interaction % Contribution ------------------------------------------------------------------------ context_attributes risk_score_weight 16.9750 16.3% session_timeout mfa_frequency -16.9750 16.3% context_attributes mfa_frequency 16.2250 15.6% risk_score_weight session_timeout -16.2250 15.6% policy_cache_ttl context_attributes -9.1750 8.8% policy_cache_ttl session_timeout 8.5250 8.2% policy_cache_ttl risk_score_weight -5.6750 5.5% context_attributes session_timeout -5.2250 5.0% risk_score_weight mfa_frequency 5.2250 5.0% policy_cache_ttl mfa_frequency 3.6750 3.5% === Summary Statistics: security_score === policy_cache_ttl: Level N Mean Std Min Max ------------------------------------------------------------ 10 4 67.7250 5.4286 63.0000 73.1000 300 4 72.9500 21.7526 48.5000 99.4000 context_attributes: Level N Mean Std Min Max ------------------------------------------------------------ 12 4 74.6000 16.9692 63.1000 99.4000 3 4 66.0750 13.5810 48.5000 79.7000 risk_score_weight: Level N Mean Std Min Max ------------------------------------------------------------ 0.1 4 68.5000 21.7119 48.5000 99.4000 0.9 4 72.1750 6.3589 64.2000 79.7000 session_timeout: Level N Mean Std Min Max ------------------------------------------------------------ 300 4 65.7500 13.3490 48.5000 79.7000 3600 4 74.9250 16.9272 63.0000 99.4000 mfa_frequency: Level N Mean Std Min Max ------------------------------------------------------------ 1 4 73.1750 20.8069 48.5000 99.4000 24 4 67.5000 8.1515 63.0000 79.7000

Optimization Recommendations

doe optimize
=== Optimization: auth_latency_ms === Direction: minimize Best observed run: #2 policy_cache_ttl = 300 context_attributes = 3 risk_score_weight = 0.1 session_timeout = 300 mfa_frequency = 1 Value: 3.8 RSM Model (linear, R² = 0.7426, Adj R² = 0.0991): Coefficients: intercept +29.5875 policy_cache_ttl +3.5625 context_attributes +6.7875 risk_score_weight +3.6375 session_timeout +8.7125 mfa_frequency +4.0125 Predicted optimum (from linear model, at observed points): policy_cache_ttl = 300 context_attributes = 12 risk_score_weight = 0.9 session_timeout = 3600 mfa_frequency = 24 Predicted value: 56.3000 Surface optimum (via L-BFGS-B, linear model): policy_cache_ttl = 10 context_attributes = 3 risk_score_weight = 0.1 session_timeout = 300 mfa_frequency = 1 Predicted value: 2.8750 Model quality: Good fit — general trends are captured, some noise remains. Factor importance: 1. session_timeout (effect: 17.4, contribution: 32.6%) 2. context_attributes (effect: -13.6, contribution: 25.4%) 3. mfa_frequency (effect: 8.0, contribution: 15.0%) 4. risk_score_weight (effect: 7.3, contribution: 13.6%) 5. policy_cache_ttl (effect: 7.1, contribution: 13.3%) === Optimization: security_score === Direction: maximize Best observed run: #1 policy_cache_ttl = 300 context_attributes = 12 risk_score_weight = 0.1 session_timeout = 3600 mfa_frequency = 1 Value: 99.4 RSM Model (linear, R² = 0.7713, Adj R² = 0.1994): Coefficients: intercept +70.3375 policy_cache_ttl +6.4625 context_attributes +8.4125 risk_score_weight +1.5625 session_timeout +0.3375 mfa_frequency -5.9625 Predicted optimum (from linear model, at observed points): policy_cache_ttl = 300 context_attributes = 12 risk_score_weight = 0.1 session_timeout = 3600 mfa_frequency = 1 Predicted value: 89.9500 Surface optimum (via L-BFGS-B, linear model): policy_cache_ttl = 300 context_attributes = 12 risk_score_weight = 0.9 session_timeout = 3600 mfa_frequency = 1 Predicted value: 93.0750 Model quality: Good fit — general trends are captured, some noise remains. Factor importance: 1. context_attributes (effect: -16.8, contribution: 37.0%) 2. policy_cache_ttl (effect: 12.9, contribution: 28.4%) 3. mfa_frequency (effect: -11.9, contribution: 26.2%) 4. risk_score_weight (effect: 3.1, contribution: 6.9%) 5. session_timeout (effect: 0.7, contribution: 1.5%)
← Previous: Vulnerability Scan Scheduling Next: Certificate Rotation Strategy →