## Finding most stable cluster from time series data

Solved
Occasional Contributor
Posts: 19

# Finding most stable cluster from time series data

I have 2 years stock market time series data comprising stocks return data. I am averaging returns on monthly basis and then using K means clustering method to get clusters for each month. So for first 1 year I am performing cluster analysis 12 times  . However due to volatile stock performances  I am getting stocks getting assigned to different clusters. How can I identify all the stocks which remains together in one cluster through whole 12 months period ?

Could you please recommend best method to find most stable cluster over period of 12 months ?

Regards,
Amol Deshmukh

Accepted Solutions
Highlighted
Solution
‎02-27-2018 01:36 PM
Posts: 5,543

## Re: Finding most stable cluster from time series data

Assuming that you have the licence to SAS/OR, you can do this:

``````/* Random assignment of 20 Stocks in 4 clusters over 3 months */
data have;
call streaminit(56456);
do stock = 1 to 20;
do month = 1 to 3;
clust = rand("integer", 4);
output;
end;
end;
run;

/* List the stocks that share the same cluster each month */
proc sql;
create table pairs as
select
a.month,
a.stock as stock1,
b.stock as stock2
from
have as a inner join
have as b on a.month=b.month and a.clust=b.clust and a.stock < b.stock;

create table stablePairs as
select
stock1, stock2
from pairs
group by stock1, stock2
having count(*) = (select count(distinct month) from have);
quit;

/* Find the groups of stocks that are always found together */
/* Note: proc optnet is part of SAS/OR */
clique out=stableGroups(rename=(clique=group node=stock));
run;

/* For example, stocks 4, 7 and 10 are always found in the same cluster */
proc print noobs data=stableGroups; run;``````
```                                   group    stock

1         3
1         6
2         4
2         7
2        10
3         5
3        15
4        17
4        18
```
PG

All Replies
Highlighted
Solution
‎02-27-2018 01:36 PM
Posts: 5,543

## Re: Finding most stable cluster from time series data

Assuming that you have the licence to SAS/OR, you can do this:

``````/* Random assignment of 20 Stocks in 4 clusters over 3 months */
data have;
call streaminit(56456);
do stock = 1 to 20;
do month = 1 to 3;
clust = rand("integer", 4);
output;
end;
end;
run;

/* List the stocks that share the same cluster each month */
proc sql;
create table pairs as
select
a.month,
a.stock as stock1,
b.stock as stock2
from
have as a inner join
have as b on a.month=b.month and a.clust=b.clust and a.stock < b.stock;

create table stablePairs as
select
stock1, stock2
from pairs
group by stock1, stock2
having count(*) = (select count(distinct month) from have);
quit;

/* Find the groups of stocks that are always found together */
/* Note: proc optnet is part of SAS/OR */
clique out=stableGroups(rename=(clique=group node=stock));
run;

/* For example, stocks 4, 7 and 10 are always found in the same cluster */
proc print noobs data=stableGroups; run;``````
```                                   group    stock

1         3
1         6
2         4
2         7
2        10
3         5
3        15
4        17
4        18
```
PG
☑ This topic is solved.