Discovering groupings of descriptive tags from media Some media websites have a collection of descriptive tags paired to every image or video, which are intended to help users filter their searches. Such data are observational, so I would limit an analysis to exploring the properties of a (large) sample without inferring causal effects. Rather, I am interested in hypothesis generation from an exploratory data analysis.
For each tag we can create an indicator function $I_{x\in A_i}(x)$ for the $i$th tag. I am interested in learning which tags tend to co-occur, and which tags to tend to not co-occur. Observed groupings of tags might suggest, but not rigorously demonstrate, possible groupings of content preferences.
I could calculate joint frequency probabilities and compare them to the marginals, or perform frequent pattern mining, or one of various clustering algorithms. From a technical standpoint, I essentially have a collection of one-hot vectors. I am wondering what is a suitable approach for finding groupings with such data based on co-occurrence.
 A: If you are after visualizing the relationships, then you might use some network visualization algorithms.
I did this once with the tags of cross validated (Disclaimer: I am not an expert at this). I made a matrix that keeps track of the number of times of times that the different tags are appearing together. Then I used that matrix as

*

*a matrix describing the edges in a network graph

*a correlation matrix in PCA and

*3 after some arbitrary trial and error with transformations, as a dissimilarity matrix in an hierarchical clustering method


A: *

*You can use the market basket analysis, a simple and popular data mining technique that does exactly what you described: groups co-occurring items together.

*For a more sophisticated solution, you can use cluster analysis. For binary data, there is a rich family of models called latent class analysis that are designed for this purpose. I'm not sure though if it would scale to a large dataset with many columns and rows like yours.

*You could transform the binary data into embeddings that would reduce its dimensionality and convert it into continuous features that later could be clustered, which makes it a simpler problem. For creating the embeddings, you could use a neural network or take one of the latent matrices created by matrix factorization (an algorithm used usually for recommender systems), where both scale very well to large data. They will create continuous features, so you can cluster them with any algorithm, e.g. $k$-means.

