Taguchi Designs
Inspired by Taguchi design methodology and the orthogonal arrays developed by Genichi Taguchi, this module provides utilities for generating Taguchi experimental designs and computing Signal-to-Noise Ratios (SNR), based on a library of orthogonal arrays.
Taguchi designs allow for systematic exploration of factor effects using a minimal number of experiments, offering a robust alternative to full factorial designs.
Sources of orthogonal arrays:
References¶
- Taguchi G., Chowdhury S., Wu Y. (2005). Taguchi's Quality Engineering Handbook. Wiley.
- Montgomery D. C. (2017). Design and Analysis of Experiments. Wiley.
- What are Taguchi designs?
Hint
All functions are available after importing:
>>> from pyDOE import (list_orthogonal_arrays, get_orthogonal_array,
... taguchi_design, compute_snr, TaguchiObjective)
Available Orthogonal Arrays¶
You can list all available Taguchi orthogonal arrays:
>>> list_orthogonal_arrays()
['L4(2^3)', 'L8(2^7)', 'L9(3^4)', 'L12(2^11)', 'L16(2^15)', ...]
Each array is described using notation like "\(L_9(3^4)\)", meaning an array with 9 runs and 4 factors each at 3 levels.
Retrieving an Orthogonal Array¶
Get a numeric orthogonal array by name:
>>> get_orthogonal_array('L4(2^3)')
array([[0, 0, 0],
[0, 1, 1],
[1, 0, 1],
[1, 1, 0]])
The arrays use zero-indexed factor levels.
Generating a Taguchi Design Matrix¶
Generate a concrete experimental matrix using factor levels:
>>> levels = [
... ["Low", "High"], # Factor 1
... ["A" , "B" ], # Factor 2
... [10 , 20 ], # Factor 3
... ]
>>> taguchi_design('L4(2^3)', levels)
array([['Low', 'A', 10],
['Low', 'B', 20],
['High', 'A', 20],
['High', 'B', 10]], dtype=object)
The design matrix replaces coded levels with actual settings for each factor.
Signal-to-Noise Ratio (SNR)¶
Taguchi designs often focus on improving robustness, measured using the Signal-to-Noise Ratio (SNR).
Three objectives are supported:
LARGER_IS_BETTERSMALLER_IS_BETTERNOMINAL_IS_BEST
Compute SNR for repeated measurements from one trial:
>>> responses = np.array([90, 95, 93])
>>> compute_snr(responses, objective=TaguchiObjective.LARGER_IS_BETTER)
39.133...
SNR values are returned in decibels (dB).
Note
compute_snr uses logarithmic transformations and assumes the responses are positive for LARGER_IS_BETTER and SMALLER_IS_BETTER.
Enum for Objective¶
The optimization objective is specified using the enumeration TaguchiObjective:
>>> TaguchiObjective.LARGER_IS_BETTER
<TaguchiObjective.LARGER_IS_BETTER: 'larger is better'>
Summary¶
The Taguchi design utilities allow you to:
- Retrieve orthogonal arrays by name.
- Build concrete design matrices with specified factor levels.
- Evaluate robustness using Signal-to-Noise Ratios.
For more details, see: