Поиск и устранение проблем с результатами оптимизации портфеля CVaR

Объект PortfolioCVaR уничтожен при изменении

Если a PortfolioCVaR объект уничтожается при изменении, не забудьте передать существующий объект в PortfolioCVaR объект, если вы хотите изменить его, в противном случае он создает новый объект. Для получения дополнительной информации см. раздел Создание объекта PortfolioCVaR.

Матричная несовместимость и несоответствующие ошибки

Если вы получаете матричную несовместимость или «несоответствующие» ошибки, представление данных в инструментах следует определенному набору основных правил, описанных в Соглашениях о представлении данных.

Оптимизация портфеля CVaR предупреждает о «максимальных итерациях»

Если на 'cuttingplane' решатель выводит следующее предупреждение:

Warning: Max iterations reached. Consider modifying the solver options, or using fmincon. 
> In @PortfolioCVaR\private\cvar_cuttingplane_solver at 255
  In @PortfolioCVaR\private\cvar_optim_min_risk at 85
  In PortfolioCVaR.estimateFrontier at 69
это предупреждение указывает, что некоторые из сообщенных эффективных портфелей могут быть недостаточно точными.

Это предупреждение обычно связано с портфелями в левом нижнем конце эффективной границы. Решатель секущей плоскости мог приблизиться к решению, но может быть слишком много портфелей с очень похожими рисками и возвратами в этом районе, и у решателя заканчиваются итерации, прежде чем достигать желаемой точности.

Чтобы исправить эту проблему, вы можете использовать setSolver для внесения любых из следующих изменений:

  • Увеличьте максимальное количество итераций ('MaxIter').

  • Ослабьте допуски на остановку ('AbsTol' и/или 'RelTol').

  • Используйте другой алгоритм главного решателя ('MasterSolverOptions').

  • Также можно попробовать 'fmincon' решатель.

Когда максимальное по умолчанию количество итераций 'cuttingplane' достигается решатель, решателю обычно нужно намного больше итераций, чтобы достичь точности, необходимой для допусков остановки по умолчанию. Можно хотеть объединить увеличение количества итераций (например, умножение на 5) с ослаблением допусков остановки (например, умножение на 10 или 100). Поскольку CVaR является стохастической задачей оптимизации, точность решения относительно выборки сценария, поэтому более свободный допуск остановки может быть приемлемым. Следует иметь в виду, что время решения может значительно увеличиться, когда вы увеличите количество итераций. Для примера удвоение количества итераций более чем в два раза увеличивает время решения. Иногда с использованием другого главного решателя (например, переключение на 'interior-point' если вы используете 'simplex' по умолчанию) может получить 'cuttingplane' решатель для сходимости, не меняя максимальное количество итераций.

Кроме того, 'fmincon' решатель может быть быстрее, чем 'cuttingplane' решатель для задач, в которых секущая плоскость достигает максимального количества итераций.

Ошибки оптимизации портфеля CVaR с сообщением «Не удалось решить»

Если на 'cuttingplane' решатель генерирует следующую ошибку:

Error using cvar_cuttingplane_solver (line 251)
Could not solve the problem. Consider modifying the solver options, or using fmincon.

Error in cvar_optim_by_return (line 100)
		[x,~,~,exitflag] = cvar_cuttingplane_solver(...

Error in PortfolioCVaR/estimateFrontier (line 80)
	pwgt = cvar_optim_by_return(obj, r(2:end-1), obj.NumAssets, ...
эта ошибка означает, что главному решателю не удалось решить одну из главных задач. Ошибка может быть вызвана числовой нестабильностью или другой специфической ситуацией.

Чтобы исправить эту проблему, вы можете использовать setSolver для внесения любых из следующих изменений:

  • Измените опции главного решателя ('MasterSolverOptions'), например, изменить алгоритм ('Algorithm') или допуск прекращения ('TolFun').

  • Также можно попробовать 'fmincon' решатель.

Ошибка оценки отсутствующих данных

Если данные возврата основных средств отсутствуют или NaN значений, simulateNormalScenariosByData функция со 'missingdata' флаг установлен на true может потерпеть неудачу либо со слишком большим количеством итераций, либо с сингулярной ковариацией. Чтобы исправить эту проблему, рассмотрим следующее:

  • Если у вас есть данные возврата активов без отсутствующих или NaN значения, можно вычислить матрицу ковариации, которая может быть сингулярной без трудностей. Если вы пропали или NaN значения в ваших данных, поддерживаемая функция отсутствующих данных требует, чтобы ваша ковариационная матрица была положительно-определенной, то есть несингулярной.

  • simulateNormalScenariosByData использует настройки по умолчанию для отсутствующей процедуры оценки данных, которая может быть не подходящей для всех задач.

В любом случае можно хотеть оценить моменты возврата активов отдельно с помощью функций оценки ECM, таких как ecmnmle или с вашими собственными функциями.

cvar_optim_transform Ошибки

Если вы получаете ошибки оптимизации, такие как:

Error using cvar_optim_transform (line 276)
Portfolio set appears to be either empty or unbounded. Check constraints.

Error in PortfolioCVaR/estimateFrontier (line 64)
	[AI, bI, AE, bE, lB, uB, f0, f, x0] = cvar_optim_transform(obj);
или
Error using cvar_optim_transform (line 281)
Cannot obtain finite lower bounds for specified portfolio set.

Error in PortfolioCVaR/estimateFrontier (line 64)
	[AI, bI, AE, bE, lB, uB, f0, f, x0] = cvar_optim_transform(obj);
Поскольку инструменты оптимизации портфеля требуют ограниченного набора портфелей, эти ошибки (и аналогичные ошибки) могут возникнуть, если ваш набор портфелей пуст и, если он не пуст, неограниченен. В частности, алгоритм оптимизации портфеля требует, чтобы ваш портфельный набор имел по крайней мере конечную нижнюю границу. Лучший способ решения этих проблем - использовать функции валидации в Валидация задачи портфеля CVaR. В частности, использование estimateBounds изучить свой портфельный набор и использовать checkFeasibility чтобы убедиться, что ваш начальный портфель является или допустимым, и, если это недопустимо, что у вас есть достаточный оборот, чтобы получить от вашего начального портфеля к набору портфелей.

Совет

Чтобы исправить эту проблему, попробуйте решить проблему с большими значениями для оборота и постепенно уменьшите до того значения, которое вы хотите.

Эффективные портфели не имеют смысла

Если вы получаете эффективные портфели, которые, кажется, не имеют смысла, это может произойти, если вы забудете задать определенные ограничения или вы установите неправильные ограничения. Для примера, если вы позволяете весам портфеля падать между 0 и 1 и не устанавливайте бюджетное ограничение, можно получить портфели, которые на 100% инвестируются в каждый актив. Хотя это может быть трудно обнаружить, лучшее, что нужно сделать, это просмотреть ограничения, которые вы установили с отображением PortfolioCVaR объект. Если вы получаете портфели со 100% инвестированием в каждый актив, можно просмотреть отображение вашего объекта и быстро увидеть, что никакие ограничения бюджета не установлены. Кроме того, вы можете использовать estimateBounds и checkFeasibility определить, имеют ли смысл ограничения для вашего портфеля, и определить, являются ли полученные вами портфели допустимыми относительно независимой формулировки вашего портфеля.

См. также

| |

Похожие примеры

Подробнее о

Внешние веб-сайты