pythonstatisticsdata-sciencereliabilityweibull

Why Weibull Reliability analysis Beta Formula in Python not matching with Normal Slope of Regression line?


I am new to reliability Analysis, found Weibull package in python is useful for my analysis. trying my level best to understand the formulas used in Weibull Package.

Business Problem: There are Few engine parts with Failure_Time and Failure_Type, I applied weibull analysis for Different part times After Filtering out the Failure_Times Based on Failure_type. my Python code.

import weibull
analysis = weibull.Analysis(Part_Time, unit='hour')

Below are 8 β and corresponding Characteristic life η values based on the filtered data.

I have 3 queries. Q1) I need to understand which combination can be considered for Further Analysis and why?

β | 1     | 1.01 | 1.73 | 0.94  | 1.49  | 1.54 | 1.74 | 1.31
η | 11364 | 8968 | 6009 | 17273 | 10374 | 9482 | 6009 | 13539

Q2) The above Combinations were obtained for Past 5 years, now I want to predict the Failure_Time for coming 2 years, Assumption: A part will be working for 6 Hrs a day. Any way to predict this?

Q3) I was referring to http://reliawiki.org/index.php/Parameter_Estimation, and found slope parameter is beta = Slope of the linear regression line, where as in Weibull package it is coded as below. Which one is correct?

beta = 1.0/slope\n',

Any help in this regard will be highly appreciated 👍


Solution

  • I would like to recommend you take a look at my Python reliability library "reliability" which is designed for analyses like this: https://reliability.readthedocs.io/en/latest/

    To answer your questions;

    Q1) Your decision to conduct further analysis depends on what questions you would like to answer from your analysis. The beta parameter (often referred to as the shape parameter) is a useful way of determining how things are failing. Beta < 1 is wearing in (also known as infant mortality) and this is often induced by poor manufacturing processes. Beta = 1 is random failure (same as exponential distribution) and failure is independent of maintenance. In these cases maintenance often makes things worse due to maintenance induced failures. Beta > 1 is wearing out. This is a case where you might want to determine a maintenance regime that repairs the item to as good as new, or at least as good as old. You need to determine what questions you want answered before you can determine which parts to analyse further.

    The eta (or alpha) parameter is the characteristic life. It tells you how long until 63.2% of your population has failed.

    Also, be careful not to lump different items together in your analysis as you will not be able to resolve the individual failure modes very easily.

    Q2) You can predict the number of future failures by looking at the cumulative distribution function (CDF). Using the python reliability library you can create a distribution, then find the value of the CDF after a certain time in just 1 line of code. This will give you the fraction of the total population that is expected to have failed by that time. Example:

    print(Weibull_Distribution(alpha=11364, beta=1).CDF(xvals=[2*365*6]))

    This will tell you that 31.984% of your units will fail in the next 2 years if running 6 hours a day every day.

    If you would like to know the time until a fraction have failed (the reverse calculation) then use the quantile function for the Weibull Distribution.

    Q3) The parametrisation is entirely dependent on the author. Both are "correct" in a sense but you need to know how to use them. I'd go with the reliawiki method most of the time as it is what most of industry uses.

    Also, I highly recommend that you fit multiple distributions rather than just Weibull. It is a very versatile distribution but not always the best. Try the Fitters.Fit_Everything function in reliability.

    If you have more specific reliability questions, please find my email in the about the author section of my python package and you can ask me there.