Historical Overview of Natural Gas Market in Turkey
What is Gas Reference Price?
From the 1970s to early 2000s, BOTAŞ (Boru Hatları ile Petrol Taşıma A.Ş.) was the only entity in the market that managed both the importation, distribution and transportation of natural gas. With the goal of increasing the number of actors in the market so that the market can be more competitive and fairness in prices can be achieved, the government introduced a law in 2001.
After the introduction of the law, BOTAŞ was no more the only importer, nor the only distributor in the market but totally kept its transportation duties. These newly added parties started to exchange natural gas between them, since it is not possible to be 100% precise in forecasting the demand and supply. These differences between supplies and demands are called “imbalances” and getting rid of these imbalances proved troublesome over time. Also, most of these exchange agreements were bilateral, so it was a really difficult task to generate a base price in the market and prevent fraud.
Based upon the reasons explained above, EPİAŞ (Enerji Piyasaları İşletme A.Ş.) launched an online platform called OTSP (Organize Toptan Doğalgaz Satış Piyasası) in September 2018, aiming
In natural gas market, trades are being done in intervals called “Gas Day”. A gas day (assuming we are in day “G”) is defined as the interval starting from the day-ahead (“G-1”) at 8 am to day-after (“G+1”) at 2 pm. So basically, it is a 54 hour period.
Natural Gas Reference Price (GRP) is the cumulative mean of the matched sale / purchase offer prices. It is designated to guide participants while they are trading, so that the market can lead itself and also to be used in imbalance corrections. GRP calculations only take prices of day-ahead (“G-1”) and intraday (“G”) matches into consideration, not day-after (“G+1”) prices.
By looking at the percentage of GRP matches among all matches, we can see that it is trending slightly upwards but it is not close to what I was expecting. (The data I used belongs to EPİAŞ Transparency Platform.)
Including the libraries that will be needed.
library(data.table)
library(dplyr)
library(ggplot2)
library(readxl)
library(lubridate)
library(zoo)
library(latticeExtra)
library(tidyr)
Importing the data about the number of matches occured in “G-1”, “G” and “G+1” days, from 2018-09-01 to 2019-11-16.
match_numbers <- read_excel("match_numbers.xls")
Reaaranging the data so that we can have a nicely formatted and named table.
match_numbers <- as.data.table(match_numbers)
match_numbers <- match_numbers %>%
rename(Date = Kontrat,
DBM = GÖEM,
IDM = GİEM,
DAM = GEEM) %>%
separate(Date, c("nulled", "Date_New"), "GG")
match_numbers$Date_New <- as.Date(match_numbers$Date_New, "%Y%m%d")
match_numbers$DBM <- as.numeric(match_numbers$DBM)
match_numbers$IDM <- as.numeric(match_numbers$IDM)
match_numbers$DAM <- as.numeric(match_numbers$DAM)
Adding the GRP Percentage column, finding monthly averages and one final formatting.
match_numbers <- match_numbers %>%
select(Date_New, DBM, IDM, DAM) %>%
rename(Date = Date_New) %>%
mutate(GRP_Percantage = 100*(DBM+IDM)/(DBM+IDM+DAM))
GRP_Percent_Monthly <- match_numbers %>%
mutate(Year = year(Date), Month = month(Date)) %>%
group_by(Year, Month) %>%
summarise(GRP_AVG_PERCENT = mean(GRP_Percantage))
GRP_Percent_Monthly$Date <- as.yearmon(paste(GRP_Percent_Monthly$Year," ",
GRP_Percent_Monthly$Month),
"%Y %m")
GRP_Percent_Monthly$Date <- as.Date(GRP_Percent_Monthly$Date, format = "%b %Y")
Finally, plotting the data over time.
ggplot(GRP_Percent_Monthly, aes(x=GRP_Percent_Monthly$Date,
y=GRP_Percent_Monthly$GRP_AVG_PERCENT)) +
geom_line(color="darkblue") +
labs(title = "Percentage of Average Monthly GRP Matches",
x = "Date",
y = "GRP Matches (%)") +
ylim(0,100) +
scale_x_date(date_breaks = "1 month", date_labels = "%b %Y") +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
geom_smooth(method = "lm", color = "red")
Let’s see the statistical summary of average GRP percentage.
summary(GRP_Percent_Monthly$GRP_AVG_PERCENT)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 14.33 32.12 40.68 39.15 46.55 57.80
To have a conclusion in this part, I think as time passes and participants are getting more and more used to the online market, trading with Gas Reference Price will be more popular.
Now let’s investigate the behaviour of GRP. First, importing the data. (The data I used belongs to EPİAŞ Transparency Platform.)
grp <- read_excel("daily_grf.xlsx")
Organizing the data.
grp <- grp %>%
slice(2:443) %>%
rename(Date = daily_grf,
GRP = ...2)
grp$Date <- dmy(grp$Date)
grp$GRP <- as.numeric(grp$GRP)
Now, plotting daily GRP data over time with a trendline.
ggplot(grp, aes(x=grp$Date, y=grp$GRP)) +
geom_line(color="darkblue") +
labs(title = "Natural Gas Reference Price over Time",
x = "Date",
y = "Natural GRP (TL/1000Sm3)") +
scale_x_date(date_breaks = "1 month", date_labels = "%b %Y") +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
geom_smooth(method = "lm", color = "red")
It seems like GRP is trending downwards. To have a better understanding, let’s find the monthly averages.
grp_monthly <- grp %>%
mutate(Year = year(Date), Month = month(Date)) %>%
group_by(Year, Month) %>%
summarise(Monthly_GRP = mean(GRP))
grp_monthly$Year <- as.numeric(unlist(grp_monthly$Year))
grp_monthly$Month <- as.numeric(unlist(grp_monthly$Month))
grp_monthly$Date <- as.yearmon(paste(grp_monthly$Year," ",grp_monthly$Month), "%Y %m")
grp_monthly$Date <- as.Date(grp_monthly$Date, format = "%b %Y")
And we are ready to see the plot.
ggplot(grp_monthly, aes(x=grp_monthly$Date, y=grp_monthly$Monthly_GRP)) +
geom_line(color="darkblue") +
geom_point(shape=5, size=2, color="red") +
labs(title = "Monthly Average of GRP over Time",
x = "Date",
y = "Natural GRF (TL/1000Sm3)") +
ylim(1400, 1600) +
scale_x_date(date_breaks = "1 month", date_labels = "%b %Y") +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
As we can see, participants had a hard time finding the balance in GRP in first couple of months but as the system settled down, prices slowly decreased. And in the last couple of months, GRP had its lowest values.
Since data we have is from September 2018 to November 2019, we cannot analyze the daily average of GRP for each month. It would have been a informing analysis about the seasonal behaviour of GRP in each month of the year, if we had more data points.
Since, importer companies do not reveal the importation prices, I decided to compare the GRP with the Russian Ruble - Turkish Lira currency rate. The reason I picked Russian Ruble is that 47% percent of natural gas imports of Turkey in 2018 was from Russia. (The data I used belongs to TC Merkez Bankası.)
Importing the data,
rub_try <- read_excel("ruble_kuru.xlsx")
Now, let’s organize the data.
rub_try <- rub_try %>%
select(Tarih:`TP DK RUB A`) %>%
rename(Exc_Rate = `TP DK RUB A`,
Date = Tarih) %>%
slice(1:1050)
rub_try <- as.data.table(rub_try)
Since exchange markets are closed at the weekend, the data points for these weekend days are missing. I filled the blank cells with the currency rate of previous friday and made a couple of formatting.
rub_try <- rub_try[, Currency_Rate := na.locf0(Exc_Rate)]
rub_try <- rub_try %>%
select(Date, Currency_Rate)
rub_try$Date <- dmy(rub_try$Date)
Let’s take a look at the table now. (There is one NA in the first row but it is already outside our time interval.)
rub_try
## Date Currency_Rate
## 1: 2017-01-01 NA
## 2: 2017-01-02 0.05732
## 3: 2017-01-03 0.05728
## 4: 2017-01-04 0.05835
## 5: 2017-01-05 0.05838
## ---
## 1046: 2019-11-12 0.08979
## 1047: 2019-11-13 0.08966
## 1048: 2019-11-14 0.08905
## 1049: 2019-11-15 0.08929
## 1050: 2019-11-16 0.08929
Merging the GRP and RUB-TRY currency by time.
grp_with_currency <- merge(grp, rub_try, by="Date")
grp_with_currency$GRP <- as.numeric(grp_with_currency$GRP)
Let’s take a look at the first 8 columns of the table.
head(grp_with_currency,8)
## Date GRP Currency_Rate
## 1 2018-09-01 1650.00 0.09359
## 2 2018-09-02 1650.00 0.09359
## 3 2018-09-03 1656.45 0.09575
## 4 2018-09-04 1644.23 0.09697
## 5 2018-09-05 1655.90 0.09732
## 6 2018-09-06 1639.40 0.09716
## 7 2018-09-07 1649.06 0.09589
## 8 2018-09-08 1633.70 0.09589
Now to have a better visual understanding, let’s plot these two variables together.
obj1 <- xyplot(grp_with_currency$GRP ~ grp_with_currency$Date, data=grp_with_currency,
main="GRP - Currency Rate over Time",
type ="l",
xlab="Time",
ylab="GRP (TL/1000Sm3)",
scales=list(x=list(rot=90,tick.number=15, format="%b %Y")))
obj2 <- xyplot(grp_with_currency$Currency_Rate ~ grp_with_currency$Date,
data=grp_with_currency,
type = "l",
ylab="Currency Rate")
doubleYScale(obj1, obj2, add.ylab2 = TRUE)
By looking at the plot, there seems to be correlation between these two variables. Now let’s take a look at the correlation statistic.
cor(grp_with_currency$GRP, grp_with_currency$Currency_Rate)
## [1] 0.281929
So by looking at the value of 0.282 , we can conclude that there is a poor positive correlation between gas reference price and currency rate.
In this part, what I wanted to analyze was to have a clear view of the effect of Gas Reference Price on Consumer Price Index of Natural Gas. By doing so, we can see how people in general is effected by the price that natural gas is being traded with in the market.
First, importing the file. (The data I used belongs to TUİK.)
cpi <- read.csv(file="CIP_Natural_Gas.csv", header=TRUE, sep="|")
Manipulating the data, so we can compare it with GRP.
#removing unnecassary columns and some renaming
cpi <- cpi %>%
select(X.2:X.13) %>%
filter(!is.na(X.2)) %>%
rename(Years = X.2,
January = Sütunlar,
February = X.3,
March = X.4,
April = X.5,
May = X.6,
June = X.7,
July = X.8,
August = X.9,
September = X.10,
October = X.11,
November = X.12,
December = X.13)
cpi <- as.data.table(cpi)
#need to get the data from 2018-09-01 to 2019-11-01
cpi_2018 <- cpi[14,]
cpi_2019 <- cpi[15,]
cpi_2018_2019 <- as.data.table(c(cpi_2018, cpi_2019))
#now we should transpose this table
cpi_2018_2019 <- t(cpi_2018_2019)
cpi_2018_2019 <- as.data.table(cpi_2018_2019)
#we should remove unnecassary columns now
cpi_2018_2019 <- cpi_2018_2019[-c(1,14,25,26)]
cpi_2018_2019 <- cpi_2018_2019 %>%
mutate(Date=seq.Date(from=as.Date("2018-01-01"),
to=as.Date("2019-10-01"), by="month")) %>%
rename(Cpi_Gas = V1)
Now the table is ready to merge with GRP table.
#merging grp with cpi
grp_with_cpi <- merge(cpi_2018_2019, grp_monthly, by="Date")
grp_with_cpi$Cpi_Gas <- as.numeric(grp_with_cpi$Cpi_Gas)
grp_with_cpi <- grp_with_cpi %>%
select(Date, Cpi_Gas, Monthly_GRP)
Let’s take a look at the final version of the table.
grp_with_cpi
## Date Cpi_Gas Monthly_GRP
## 1 2018-09-01 1.3671 1576.284
## 2 2018-10-01 1.4890 1580.432
## 3 2018-11-01 1.5046 1480.222
## 4 2018-12-01 1.4992 1452.163
## 5 2019-01-01 1.3742 1550.164
## 6 2019-02-01 1.3713 1459.291
## 7 2019-03-01 1.3711 1499.178
## 8 2019-04-01 1.3732 1473.625
## 9 2019-05-01 1.3800 1512.374
## 10 2019-06-01 1.3924 1505.658
## 11 2019-07-01 1.3968 1505.177
## 12 2019-08-01 1.6013 1471.441
## 13 2019-09-01 1.8242 1483.943
## 14 2019-10-01 1.8262 1458.225
Since the online platform is a fairly new system and consumer price index values are published monthly, the number of data points radically decreased, specifically to 14.
Nevertheless, it still makes sense to check the correlation in between.
cor(grp_with_cpi$Monthly_GRP, grp_with_cpi$Cpi_Gas)
## [1] -0.3746983
This value is not something we would have expected. Logically, we would have expected them to be strongly positive correlated, because the market price of the gas should directly effect the price of the gas people consume. At this point we can guess, the goverment has not been marking up the prices sufficiently up until now and there might be some more mark ups in the near future.