Как провести анализ кривой?
Насколько я понимаю, плохо – это когда разница между минимумом и максимумом очень большая, хорошо – когда эта разница маленькая (по крайней мере на конце графика). Также имеет значение гладкость.
Я вижу здесь два варианта решения:
1. Описательный.
Вы сами формулируете критерии "хорошести", и находите способ её измерения. То есть нужна функция L: "множество функций" -> [0, 1], и если L(f) = 1, то график f хороший, если L(f) = 0, то график f плохой.
2. Машинное обучение.
Здесь вам всё равно нужно описать какие-то критерии функции, и для каждой функции соорудить вектор-признак. Например, вектор-признак может содержать информацию (значение максимума; значение минимума; разность между макс и мин; какой-то показатель гладкости (может быть вычислить производную в каждой точке, и смотреть чтобы производная менялась не сильно); площадь подграфика и т.п.).
Затем, собираете выборку графиков, для них получаете выборку векторов-признаков, и дальше можете использовать алгоритмы классификации: логистическая регрессия, нейронные сети, SVM и т.п. Успех данного подхода зависит от того, насколько хорошо придуманный вами вектор-признак будет описывать ваши же критерии.
Результатом будет та же функция L: "множество функций" -> [0, 1], только, возможно, вы не сможете осмыслить её работу (не будет словестного критерия, как в п.1), но она также будет выдавать на выход является функция хорошей или плохой.
Тут нужно определить критерии "плохой\хороший", потому как по графикам не особо заметно разницы, нужно понимать, что если результат не очевиден человеку, объяснить это компьютеру будет еще тяжелее. 
Если таких критериев нет нужно их найти, что можно следать:1. Отобрать как можно больше "плохих" графиков и отдельно "хороших"
2. Нормализовать, то есть привести их виду, где минимальное и максимальное значение по осям будет одно и тоже (если конечно нет критерия вида много по Y - плохо и т.п.)
3. На нормализованной плоскости построить сплайн или просто сразу апроксимировать функции таким образом чтобы получить для каждого графика одинаковый набор значений y для одних и тех же X, к примеру на нормализованной плоскости через каждые n единиц по X получить значение Y. 
На выходе получится матрица Xmax*Ymax, где каждой на пересечении будет 1 либо 0
Данные матрицы можно использовать для обучения нейронной сети. 
или матрицы не строить а оставить в виде  последовательности значений Y, потом сравнивать вектора "плохих" графиков с векторами "хороших", 
для сравнения можно будет использовать все что в голову взбредет, то есть любые математические функции, какая ни будь даст достаточно статистически различимый результат. Кстати полученное на п.2-3 можно использовать и для кластеризации.