The advancements in machine learning (ML) techniques open new opportunities for analysing production system dynamics and augmenting the domain expert's decision-making. A common problem for domain experts on the shop floor is detecting throughput bottlenecks, as they constrain the system throughput. Detecting throughput bottlenecks is necessary to prioritise maintenance and improvement actions and obtain greater system throughput. The existing literature provides many ways to detect bottlenecks from machine data, using statistical-based approaches. These statistical-based approaches can be best applied in environments where the statistical descriptors of machine data (such as distribution of machine data, correlations and stationarity) are known beforehand. Computing statistical descriptors involves statistical assumptions. When the machine data doesn't comply with these assumptions, there is a risk of the results being disconnected from actual production system dynamics. An alternative approach to detecting throughput bottlenecks is to use ML- based techniques. These techniques, particularly unsupervised ML techniques, require no prior statistical information on machine data. This paper proposes a generic, unsupervised ML-based hierarchical clustering approach to detect throughput bottlenecks. The proposed approach is the outcome of systematic and careful selection of ML techniques. It begins by generating a time series of the chosen bottleneck detection metric and then clustering the time series using a dynamic time-wrapping measure and a complete-linkage agglomerative hierarchical clustering technique. The results are clusters of machines with similar production dynamic profiles, revealed from the historical data and enabling the detection of bottlenecks. The proposed approach is demonstrated in two real-world production systems. The approach integrates the concept of humans in-loop by using the domain expert's knowledge.