Using Time Series Analysis to Predict the Return of “Fondos Comunes de Inversión (FCI)” in Argentina
In October-2022 I moved to Buenos Aires from New Jersey — United States after 16 years living there. Soon afterwards, like every single Argentinean, I was into periodically checking (and obsessing) not about weather conditions but exchange rates between the US Dollar and the Argentinean Peso together with increments in the price of consumer goods. After I obtained my residency papers and could open a bank account where to deposit my earnings from teaching Data Science at a local private university, I was concerned on how to best manage my money in lieu of a constant decrease of purchasing power. Because of this, I recently got interested in learning all about investing in capital markets. The learning curve is daunting and the current uncertainty of the economic (high inflation) and political (new government) situation of Argentina challenges me even further. Like most Argentineans, my first investment type was a Plazo Fijo at a local bank. However, I immediately learned that it wasn’t an optimal investment option because of tasas de interés real negativas that cannot cope with inflation’s pace. With knowledge on inflation data of 25.5% for December-2023, I walked into a book store located in Avenida Santa Fe one hot afternoon in early January-2024 and bought seven books related to investing, with five of them about investing in capital markets of Argentina. The idea at the time was to acquire the minimum practical knowledge on investing that could allow me to withdraw my money from the bank and place it to work on the capital market, hoping to obtain better returns on a monthly basis. The first books I read suggested investing in Fondos Comunes de Inversión (FCI) as first step into the field for newcomers.
What are Fondos Comunes de Inversión (FCI)?
In FCIs, professional teams (known as Sociedades Gerentes) manages all the decisions in relation to the allocation of funds (pooled money provided by individual investors) towards different investment instruments under pre-established criteria (described in the Reglamentos de Gestión) in relation to the expected return-on-investments and the associated risks. The assets of FCIs are managed (and kept in custody) by financial institutions (usually banks) known as Sociedades Depositarias. Investors own part of an FCI when they purchase cuotapartes, representative units describing investor’s co-ownership in the FCI’s patrimony, which changes in price on a daily basis based on the valuation of assets composing the FCI, the amount of cash administered by the FCI, and the amount of cuotapartes in circulation. In Argentina, the activities of FCIs are regulated and supervised by La Comisión Nacional de Valores (CNV).
FCIs provide several advantages for novice people who wish to invest in capital markets (FCIs are also advantageous for those who lack the time to manage their investments on a regular basis) because of the following reasons: (1) your money is managed by professional teams with specialized knowledge; (2) because money from many investors is pooled, FCIs can diversify their investment across several assets, reducing the risk; (3) they are transparent and safe because FCIs publish the price of cuotapartes each business day, and they are under scrutiny by the CNV; and (4) you can purchase and sell cuotapartes at any time, giving you flexibility in terms of entering and leaving an investment.
There are Plenty of FCIs to Choose From!
You can browse all the available FCIs at the website sponsored by the Cámara Argentina de Fondos Comunes de Inversión (CAFCI) (Figure 1), where you can also check the daily price of cuotapartes for your FCI of interest (Figure 2).
After some deliberation, in January of 2024 I decided to invest money (I purchased cuotapartes using a broker’s platform as intermediary) in three different FCIs: Balanz Retorno Total — Clase A (ticker name: BAINGLA), ADCAP Moneda — Clase A (ticker name: CONCRETO) and Megainver Renta Fija Cobertura — Clase A (ticker name: MRTAFCA). Whereas BAINGLA is a type of FCI known as “renta mixta” because invests in assets of “renta fija” and “acciones (renta variable)”; CONCRETO and MRTAFCA are FCIs that invest in instruments of “renta fija” that are dollar-linked because although in dollars, their returns are in Argentinean pesos adjusted to the official dollar exchange rate. The investment portfolios corresponding to these three FCIs (and their associated returns) can be inspected at CAFCI’s website, and by obtaining each of the FCI’s fact sheet from the Balanz, ADCAP and Megainver websites as well.
Taking into account that none of the above three FCIs generated returns on investment that surpassed inflation of 25.5% in December of 2023, I was curios to know how they will perform throughout the first six months of 2024 in relation to the projected inflation values. For this reason, I implemented time series analysis to predict the return of BAINGLA, CONCRETO and MRTAFCA from January to June of 2024. Which FCI (if any) will surpass inflation values? That’s the question I decided to answer using my knowledge on data science.
Time Series Analysis for the Prediction of FCI’s Future Returns
Longitudinal data (that differs from cross-sectional data) represents the measurement of variables at regularly spaced time intervals for a given span of time, with observations arranged into a time series. When studying time series data, we are concerned about two key questions: (1) what happened in the past (descriptive analysis), and (2) what will happen next (forecasting analysis). Data related to monthly returns from FCIs offers an opportunity to apply time series analysis to answer questions such as:
>> Are the returns of FCIs changing over time?
>> Are there seasonal effects, with FCI’s return rising and falling in a regular manner throughout the year?
>> Can future monthly returns be forecasted?
>> Will FCI’s future returns surpass the projected inflation?
I proceeded then to manually collect monthly data on FCI’s returns during the January-2017 to January-2024 period by accessing the CAFCI’s website, and inspected their statistics (Figure 3). I learned that MRTAFCA had a median monthly return of 3.507%, the highest among the three FCIs I invested in.
# load libraries
library(tidyverse)
library(forecast)
library(stats)
library(graphics)
# Create vectors containing values from monthly returns
# Rendimiento Mensual (en %) para tres FCI
# BALANZ RETORNO TOTAL CLASE A (BAINGLA)
# start: January-2017
# end: January-2024
baingla <- c(2.966, 1.642, 1.838, 1.154, 1.945, 1.404, 1.093, 2.649, 0.894, 1.859, 1.369, 3.856,
2.862, 1.961, 1.818, 0.618, -1.440, -0.032, -2.108, 9.798, 16.298, -0.231, 3.286, 2.994,
8.83, 2.591, 1.126, -4.271, 1.275, 6.938, 5.522, -34.274, -9.221, 6.446, 1.545, 61.579,
18.864, -1.848, -4.284, 16.349, 5.224, 1.241, 6.734, 0.438, -0.420, 1.483, 5.574, 1.319,
3.695, 1.733, -0.935, 5.237, 7.153, 2.505, 4.905, 4.687, 3.971, 4.964, -0.157, 0.955,
4.972, -1.419, 2.975, 4.964, 1.027, 2.723, 13.181, 7.450, 3.568, 2.903, 8.827, 9.115,
10.528, 1.159, 4.072, 9.869, 9.607, 9.903, 6.537, 27.375, -0.155, 14.915, 11.698, 14.228,
19.056)
# ADCAP MONEDA CLASE A (CONCRETO)
# start: January-2017
# end: January-2024
concreto <- c(1.896, 1.668, -3.805, 1.296, 1.386, -2.255, 1.531, 1.481, -3.053, 1.928, 1.929, 2.017,
2.201, 1.909, -4.116, 1.284, 1.836, -2.815, -0.009, -5.919, 4.468, 4.824, 4.712, 5.333,
3.665, 2.914, 2.323, 3.870, 4.043, 3.996, 3.981, -19.524, -3.717, 9.245, 4.709, 3.291,
5.299, 0.311, 1.774, 13.797, 3.762, 2.815, 3.651, 1.809, 1.159, 3.397, 2.667, 2.479,
2.711, 0.431, -1.703, 3.209, 1.535, 1.644, 1.849, 2.361, 2.309, 3.044, 0.661, 1.894,
0.835, 0.525, 2.016, 6.720, 0.979, 1.029, 8.715, 3.956, 4.535, 3.577, 5.959, 5.884,
6.886, 2.647, 4.035, 5.334, 9.789, 8.227, 6.547, 21.733, 3.036, 11.880, 17.179, 29.134,
13.428)
# MEGAINVER RENTA FIJA COBERTURA CLASE A (MRTAFCA)
# start: January-2017
# end: January-2024
mrtafca <- c(0.127, -1.371, 0.544, 0.822, 4.814, 3.465, 5.397, -1.465, 0.809, 1.834, -0.670, 7.573,
5.478, 3.663, 0.338, 2.019, 14.840, 13.561, -3.131, 26.943, 12.083, -8.231, 6.109, 4.192,
0.668, 4.617, 8.730, 2.863, 0.538, -4.081, 3.954, 23.315, 9.708, 13.377, -0.594, 3.754,
13.263, 0.645, 3.492, 14.856, -0.232, 2.758, 5.272, 1.335, 1.019, 4.079, 3.527, 3.432,
3.527, 0.838, -1.116, 3.507, 1.569, 0.913, 2.984, 1.954, 2.616, 2.566, 0.023, 0.607,
1.178, 1.591, 2.966, 7.583, 0.480, 2.140, 8.784, 5.221, 5.160, 2.478, 5.746, 5.193,
4.733, 4.668, 6.263, 9.014, 10.480, 8.247, 7.396, 24.295, -4.356, 18.193, 20.447, 25.795,
15.790)
# create dataframe
fci <- data.frame(baingla, concreto, mrtafca)
# obtain summary statistics
summary(fci) # MRTAFCA has the highest Median value of 3.507%
Inspecting the Distribution of FCIs’ Monthly Returns
I observed extreme return values for BAINGLA in August (-34.274%) and December (61.579%) of 2019 (Figure 4), and thus decided to replace them with the median value of 2.903% to keep my analysis coherent (Figure 5).
# visualize distribution of monthly returns
ggplot(data = fci, aes(x = baingla)) +
geom_histogram(binwidth = 2, fill = "white", colour = "black")
# replace outlier return values (-34.274 & 61.579) with median value of 2.903
fci$baingla[32] # -34.274%
fci$baingla[32] <- 2.903
fci$baingla[36] # 61.579
fci$baingla[36] <- 2.903
summary(fci)
# visualize distribution of monthly returns with outliers replaced with median values
ggplot(data = fci, aes(x = baingla)) +
geom_histogram(binwidth = 2, fill = "white", colour = "black")
baingla[32] <- 2.903
baingla[36] <- 2.903
The distribution of returns values for CONCRETO and MRTAFCA are shown in Figure 5C and Figure 5D respectively. The range of return values is smaller for MRTAFCA, signaling a safer (more stable) investment option compared to the other two FCIs. This is also evident in the number of months displaying negative returns, which is lower for MRTAFCA compared to BAINGLA and CONCRETO.
# visualize distribution of monthly returns for concreto
ggplot(data = fci, aes(x = concreto)) +
geom_histogram(binwidth = 2, fill = "white", colour = "black")
# visualize distribution of monthly returns for mrtafca
ggplot(data = fci, aes(x = mrtafca)) +
geom_histogram(binwidth = 2, fill = "white", colour = "black")
I created time-series objects with BAINGLA, CONCRETO and MRTAFCA data in order to analyze monthly returns over time (Figure 6). I left out the return values for January-2024 on purpose because I will use them to check against the predicted returns for 2024.
# TIME SERIES ANALYSIS
# create time series object for baingla
baingla.series <- ts(baingla, start = c(2017, 1), end = c(2023, 12), frequency = 12)
baingla.series
# create time series object for concreto
concreto.series <- ts(concreto, start = c(2017, 1), end = c(2023, 12), frequency = 12)
concreto.series
# create time series object for mrtafca
mrtafca.series <- ts(mrtafca, start = c(2017, 1), end = c(2023, 12), frequency = 12)
mrtafca.series
# plot monthly returns for baingla
plot(baingla.series)
# plot monthly returns for concreto
plot(concreto.series)
# plot monthly returns for mrtafca
plot(mrtafca.series)
In order to clarify the general trend in monthly returns for BAINGLA, CONCRETO and MRTAFCA the time series was smoothed with simple moving averages (Figure 7), revealing a drop in returns during 2019 for the three FCIs; and an increasing trend in returns that started around 2022.
# what happened throughout time (description)
# BAINGLA smoothing with simple moving average to identify general trends
opar <- par(no.readonly = TRUE)
par(mfrow = c(2,2))
ylim <- c(min(baingla.series), max(baingla.series))
plot(baingla.series, main = "baingla raw time series")
plot(ma(baingla.series, 3), main = "baingla simple moving average k = 3", ylim = ylim)
plot(ma(baingla.series, 5), main = "baingla simple moving average k = 5", ylim = ylim)
plot(ma(baingla.series, 7), main = "baingla simple moving average k = 7", ylim = ylim)
par(opar)
# CONCRETO smoothing with simple moving average to identify general trends
opar <- par(no.readonly = TRUE)
par(mfrow = c(2,2))
ylim <- c(min(concreto.series), max(concreto.series))
plot(concreto.series, main = "concreto raw time series")
plot(ma(concreto.series, 3), main = "concreto simple moving average k = 3", ylim = ylim)
plot(ma(concreto.series, 5), main = "concreto simple moving average k = 5", ylim = ylim)
plot(ma(concreto.series, 7), main = "concreto simple moving average k = 7", ylim = ylim)
par(opar)
# MRTAFCA smoothing with simple moving average to identify general trends
opar <- par(no.readonly = TRUE)
par(mfrow = c(2,2))
ylim <- c(min(mrtafca.series), max(mrtafca.series))
plot(mrtafca.series, main = "mrtafca raw time series")
plot(ma(mrtafca.series, 3), main = "mrtafca simple moving average k = 3", ylim = ylim)
plot(ma(mrtafca.series, 5), main = "mrtafca simple moving average k = 5", ylim = ylim)
plot(ma(mrtafca.series, 7), main = "mrtafca simple moving average k = 7", ylim = ylim)
par(opar)
Subsequently, I inspected seasonal effects by decomposing the time series into trend, seasonal and irregular components (Figure 8). As seen in Figure 7, the trend component captures changes in return over time. The seasonal component captures cyclical effects ought to the time of year; and the irregular component captures those effects not accounted for in the trend and seasonal aspects. The inspection of seasonal effects for BAINGLA revealed diminished returns during the months of February, March and September whereas the highest peaks in return happened during January and August. Seasonal effects for CONCRETO revealed diminished returns during March, June, August and September, with the highest peaks in returns occurring during the months of April and December. The seasonal effects for MRTAFCA revealed the lowest peak in returns during February, with the highest peak occurring on August.
# decomposing to observe seasonal effects
# BAINGLA seasonal decomposition by loess smoothing
baingla.series.fit <- stl(baingla.series, s.window = "periodic")
# plot decomposed series into seasonal, trend and irregular components
plot(baingla.series.fit)
# view seasonal variation
baingla.series.fit$time.series
# CONCRETO seasonal decomposition by loess smoothing
concreto.series.fit <- stl(concreto.series, s.window = "periodic")
# plot decomposed series into seasonal, trend and irregular components
plot(concreto.series.fit)
# view seasonal variation
concreto.series.fit$time.series
# MRTAFCA seasonal decomposition by loess smoothing
mrtafca.series.fit <- stl(mrtafca.series, s.window = "periodic")
# plot decomposed series into seasonal, trend and irregular components
plot(mrtafca.series.fit)
# view seasonal variation
mrtafca.series.fit$time.series
The seasonal decomposition of BAINGLA, CONCRETO and MRTAFCA time series was also visualized using month plots (Figure 9); these plots display the subseries for each month (all January values connected, and so on) together with the average of each subseries. The plots clearly show that for BAINGLA, the average returns are lower in February and March, and highest in January and August (Figure 9A); for CONCRETO, the average returns are lowest in March and highest in December (Figure 9B); and for MRTAFCA, the average returns are lowest in February and highest in August (Figure 9C).
# further visualize seasonal decomposition for BAINGLA using month plot
monthplot(baingla.series, xlab = "", ylab = "")
seasonplot(baingla.series, xlab = "", ylab = "")
# further visualize seasonal decomposition for CONCRETO using month plot
monthplot(concreto.series, xlab = "", ylab = "")
seasonplot(concreto.series, xlab = "", ylab = "")
# further visualize seasonal decomposition for MRTAFCA using month plot
monthplot(mrtafca.series, xlab = "", ylab = "")
seasonplot(mrtafca.series, xlab = "", ylab = "")
Forecasting FCIs Returns using Exponential Models
Because exponential models are known to deliver good short-term predictions, I implemented the Holt-Winters exponential smoothing model to fit FCIs time series with level, trend and seasonal components (Figure 10). The model predicted a return for BAINGLA of 14.526% for January-2024 which was 4.53 percentage points below the real return of 19.056% for the month. Predicted values decreased for February and March-2024 which was consistent with real values shown on the month plot in Figure 9A. For CONCRETO, the model predicted a return of 15.864% for January-2024 which was 2.436 percentage points above the real return of 13.428% for the month. The predicted return was highest for April-2024 which was consisted with results shown on the month plot (Figure 9B). For MRTAFCA, the model predicted a return of 13.751% for January-2024 which was 2.039 percentage points below the real return of 13.428% for the month. The predicted return was highest for April-2024 which was consisted with results shown on the month plot (Figure 9C).
# Fit BAINGLA time series to the Holt-Winters exponential smoothing model
fit.baingla <- ets(baingla.series, model = "ANA")
fit.baingla
# asses accuracy of the model
accuracy(fit.baingla)
# use the fitted model to make predictions on monthly returns
forecast(fit.baingla, 6)
# visualize predicted returns
pred <- forecast(fit.a, 6)
plot(pred, main = "BAINGLA predicted monthly returns 2024", ylab = "Return (%)", xlab = "Time")
# Fit CONCRETO time series to the Holt-Winters exponential smoothing model
fit.concreto <- ets(concreto.series, model = "ANA")
fit.concreto
# asses accuracy of the model
accuracy(fit.concreto)
# use the fitted model to make predictions on monthly returns
forecast(fit.concreto, 6)
# visualize predicted returns
pred.concreto <- forecast(fit.concreto, 6)
plot(pred.concreto, main = "CONCRETO predicted monthly returns 2024", ylab = "Return (%)", xlab = "Time")
# Fit MRTAFCA time series to the Holt-Winters exponential smoothing model
fit.mrtafca <- ets(mrtafca.series, model = "ANA")
fit.mrtafca
# asses accuracy of the model
accuracy(fit.mrtafca)
# use the fitted model to make predictions on monthly returns
forecast(fit.mrtafca, 6)
# visualize predicted returns
pred.mrtafca <- forecast(fit.mrtafca, 6)
plot(pred.mrtafca, main = "MRTAFCA predicted monthly returns 2024", ylab = "Return (%)", xlab = "Time")
FCI’s Predicted Returns Relative to the Projected Inflation for 2024
According to a news article published by El Cronista newspaper on February-6–2024, the projected inflation for the first six months of the year was: January: 20% / February: 18.2% / March: 15% / April: 12% / May: 10% / June: 8.3%. Based on this, the predicted BAINGLA monthly returns would be less than half the projected inflation during February and March; comparable to the projected inflation for April and May; and slightly higher than inflation for June. This means that my investment in BAINGLA might be wining inflation from June 2024 and afterwards (Table 1). The investment perspective looks better for CONCRETO and MRTAFCA with predicted returns higher than the projected inflation from April to June-2024.
Conclusion
In this work I implemented time series analysis to describe historic patterns of monthly returns for three FCIs (BAINGLA, CONCRETO and MRTAFCA) and to make predictions in order to compare those returns to the projected inflation for the first six months of 2024. I found that MRTAFCA is a better investment option because of a higher median value for monthly returns, and a smaller range of return values. The visualization of seasonal effects and the average return values aggregated on monthly subseries (month plots) has value when selecting complementary FCIs when assembling an investment portfolio because I can select FCIs with highest average returns on any given month to cover the whole year. By forecasting monthly returns I estimated that my CONCRETO and MRTAFCA investments will be surpassing the projected inflation starting in April-2024. This work may be useful when selecting FCIs in the future.
References
About the author
Martin Calvino is currently a Visiting Professor in Data Science and Multimedia Art at Torcuato Di Tella University in Buenos Aires; he previously worked as Computational Biologist at The Human Genetics Institute of New Jersey — Rutgers University; he is also a Multimedia Artist. You can follow him on Instagram: @from.data.to.art