Why Portfolio Skewness Depends on Co-Skewness
Summary
This document raises a portfolio optimization question about setting an aspirational skewness target in a mean-variance-skewness-kurtosis framework. The example code maximizes a weighted sum of each asset’s individual skewness, subject to fully invested, long-only weights. Because that objective is linear in the weights, the optimizer favors the single asset with the largest individual skewness rather than calculating the skewness of the combined portfolio.
The question points toward a key distinction: portfolio moments depend on joint return behavior, so portfolio skewness requires cross-asset co-skewness terms, just as portfolio kurtosis involves co-kurtosis terms. The document does not include an answer or a complete implementation, and it gives no data-based evidence or optimization results beyond the behavior the author reports. It therefore identifies a modeling issue rather than presenting a solved optimization method; readers would need the paper’s formulation and appropriate higher-moment estimates to construct the intended objective.
Key ideas
- A weighted average of individual asset skewness is not generally the skewness of portfolio returns.
- A linear skewness objective with long-only weights tends to concentrate in the asset with the highest individual skewness.
- Portfolio skewness depends on joint return moments, including co-skewness across assets.
- Higher-moment portfolio optimization also needs co-kurtosis terms when kurtosis is part of the model.
Tags
Full text
# Maximising skewness for a portfolio
# Maximising skewness for a portfolio
I am trying to recreate the Mean-Variance-Skewness-Kurtosis-based Portfolio Optimization work done by Lai et Al. (2006) (link).
I reached the part where in order to run the PGP model, you need to feed the aspired levels of the first four moments. The steps to calculate the aspired levels are the following:
I am struggling to understand how they actually solve these sub-problems. I tried to run the optimization to maximise the skewness in python using the following code:
```
import pandas as pd
import numpy as np
from scipy.optimize import minimize
df_1 = pd.read_excel("LogReturns_Weekly.xlsx", sheet_name="Performance Graph")
# Returns Statistics
mean_returns = df_1.mean()
stdev_returns = df_1.std()
skew_returns = df_1.skew()
def maximize_skewness(weights):
portfolio_skewness = np.dot(weights, skew_returns)
return -portfolio_skewness
constraints = ({'type': 'eq', 'fun': lambda weights: np.sum(weights) - 1})
bounds = tuple((0, 1) for asset in range(len(skew_returns)))
num_assets = 5
random_weights = np.random.random(num_assets)
random_weights /= np.sum(random_weights)
random_weights, np.sum(random_weights)
print(random_weights)
solution_skewness = minimize(maximize_skewness, random_weights, method='SLSQP', bounds=bounds, constraints=constraints)
optimal_weights = solution_skewness.x
max_skewness = -solution_skewness.fun
optimal_weights_percentage = [round(weight * 100, 2) for weight in optimal_weights]
print("Optimal Weights in Percentage:", optimal_weights_percentage)
print("Maximum Skewness:", max_skewness)
```
The issue is that the optimization suggests to allocate 100% of capital to the asset that has the maximim level of skewness in the portfolio, therefore saying that the aspired level of skewness is just the max value of skewness out of the returns for the assets in the portfolio.
Not sure why this is happening, am I missing something in the code? In the paper they also mention to compute the skewness-coskewness and kurtosis-kocurtosis but I am unsure whterh these values are needed at this stage.
Any help would be greatly appreciated.Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)
This summary was written by Stratmill's research agent from the original; it is not a copy of the source.