Skip to content
11

Grid search cross validation

PortfolioOptimisers.GridSearchCrossValidation Type
julia
struct GridSearchCrossValidation{T1, T2, T3, T4, T5, T6, T7} <:
       AbstractSearchCrossValidationEstimator
    p::T1
    cv::T2
    r::T3
    scorer::T4
    ex::T5
    train_score::T6
    kwargs::T7
end

Performs grid search cross-validation for portfolio optimisation estimators. Iterates over parameter grids, applies cross-validation splits, and scores each configuration to select the optimal parameters.

Fields

  • p: Parameter grid for optimisation.

  • cv: Cross-validation splitter (e.g., KFold).

  • r: Risk measure used for scoring (e.g., ConditionalValueatRisk).

  • scorer: Scoring function to select optimal parameter set.

  • ex: Parallel execution strategy (e.g., FLoops.ThreadedEx).

  • train_score: Whether to record training scores.

  • kwargs: Additional keyword arguments for customisation.

Constructors

julia
GridSearchCrossValidation(p::MultiGSCVValType_VecMultiGSCVValType; cv::SearchCV = KFold(),
                          r::AbstractBaseRiskMeasure = ConditionalValueatRisk(),
                          scorer::CrossValSearchScorer = HighestMeanScore(),
                          ex::FLoops.Transducers.Executor = FLoops.ThreadedEx(),
                          train_score::Bool = false, kwargs::NamedTuple = (;))
  • Arguments correspond to fields above.

Validation

  • @argcheck(!isempty(p), IsEmptyError): Parameter grid must not be empty.

  • If p is a vector of parameter sets, each must not be empty.

  • All validations use custom error types.

Examples

julia
julia> GridSearchCrossValidation(Dict("alpha" => [0.1, 0.2], "beta" => [1.0, 2.0]))
GridSearchCrossValidation
            p ┼ Dict{String, Vector{Float64}}: Dict("alpha" => [0.1, 0.2], "beta" => [1.0, 2.0])
           cv ┼ KFold
              │              n ┼ Int64: 5
              │    purged_size ┼ Int64: 0
              │   embargo_size ┴ Int64: 0
            r ┼ ConditionalValueatRisk
              │   settings ┼ RiskMeasureSettings
              │            │   scale ┼ Float64: 1.0
              │            │      ub ┼ nothing
              │            │     rke ┴ Bool: true
              │      alpha ┼ Float64: 0.05
              │          w ┴ nothing
       scorer ┼ HighestMeanScore()
           ex ┼ Transducers.ThreadedEx{@NamedTuple{}}: Transducers.ThreadedEx()
  train_score ┼ Bool: false
       kwargs ┴ @NamedTuple{}: NamedTuple()

Related

source
PortfolioOptimisers.search_cross_validation Method
julia
search_cross_validation(opt::NonFiniteAllocationOptimisationEstimator,
                       gscv::GridSearchCrossValidation,
                       rd::ReturnsResult)

Performs grid search cross-validation for portfolio optimisation estimators. Iterates over parameter grids, applies cross-validation splits, fits and scores each configuration, and selects the optimal parameters using the provided scoring strategy.

Arguments

  • opt: Portfolio optimisation estimator to be tuned.

  • gscv: Grid search cross-validation estimator specifying parameter grid, CV splitter, risk measure, scorer, execution strategy, and options.

  • rd: Returns result containing asset returns data.

Returns

  • SearchCrossValidationResult: Result type containing the optimal estimator, test and train scores, parameter grid, and selected index.

Validation

  • Ensures parameter grid is not empty.

  • Validates cross-validation splits and indices.

Details

  • Iterates over all parameter combinations in the grid.

  • Applies cross-validation splits to the returns data.

  • Fits the estimator for each parameter set and split.

  • Scores each configuration using the specified risk measure and scoring function.

  • Selects the optimal parameter set based on cross-validation scores.

  • Returns a result object encapsulating the optimal estimator and score matrices.

Related

Examples

source