¿Encontrar el punto de codo de una curva de forma estable?

Soy consciente de la existencia de esto , y esto en este tema. Sin embargo, me gustaría finalizar en una implementación real en Python esta vez.

Mi único problema es que el punto del codo parece estar cambiando de diferentes instancias de mi código. Observa las dos plots que se muestran en este post. Si bien parecen ser visualmente similares, el valor del punto del codo cambió significativamente. Ambas curvas se generaron a partir de un promedio de 20 carreras diferentes. Incluso entonces, hay un cambio significativo en el valor del punto del codo. ¿Qué precauciones puedo tomar para asegurarme de que el valor se encuentre dentro de cierto límite?

Mi bash se muestra a continuación:

def elbowPoint(points): secondDerivative = collections.defaultdict(lambda:0) for i in range(1, len(points) - 1): secondDerivative[i] = points[i+1] + points[i-1] - 2*points[i] max_index = secondDerivative.values().index(max(secondDerivative.values())) elbow_point = max_index + 1 return elbow_point points = [0.80881476685027154, 0.79457906121371058, 0.78071124401504677, 0.77110686192601441, 0.76062373158581287, 0.75174963969985187, 0.74356408965979193, 0.73577573557299236, 0.72782434749305047, 0.71952590556748364, 0.71417942487824781, 0.7076502559300516, 0.70089375208028415, 0.69393584640497064, 0.68550490458450741, 0.68494440529025913, 0.67920157634796108, 0.67280267176628761] max_point = elbowPoint(points) 

introduzca la descripción de la imagen aquíintroduzca la descripción de la imagen aquí

¿Suena como si su preocupación real fuera cómo suavizar sus datos ya que contiene ruido? ¿En qué caso quizás debería ajustar primero una curva a los datos, luego encontrar el codo de la curva ajustada?

Si esto funcionará, dependerá de la fuente del ruido y si el ruido es importante para su aplicación. por cierto, es posible que desee ver qué tan sensible es su ajuste a sus datos al ver cómo cambia (o con suerte no lo hace) cuando se omite un punto del ajuste (obviamente, con un polinomio lo suficientemente alto, siempre obtendrá un buen ajuste). a un conjunto específico de datos, pero está presumiblemente interesado en el caso general)

No tengo idea de si este enfoque es aceptable, intuitivamente, aunque creo que la sensibilidad a pequeños errores es mala. En última instancia, al ajustar una curva, usted dice que el proceso subyacente está, en el caso ideal, modelado por la curva, y cualquier desviación de la curva es un error / ruido.