예제 #1
0
        static void Main(string[] args)
        {
            MLContext context = new MLContext();

            IDataView dataView            = context.Data.LoadFromTextFile <ModelInput>(path: "data.csv", hasHeader: false, separatorChar: ';');
            IDataView trainingYearData    = context.Data.FilterRowsByColumn(dataView, "Year", upperBound: 2019);
            IDataView evaluateYearData    = context.Data.FilterRowsByColumn(dataView, "Year", lowerBound: 2020);
            var       forecastingPipeline = context.Forecasting.ForecastBySsa(
                outputColumnName: "ForecastedIncidents",
                inputColumnName: "TotalIncidents",
                windowSize: 2,
                seriesLength: 7,
                trainSize: 365,
                horizon: 7,
                confidenceLevel: 0.5f,
                confidenceLowerBoundColumn: "LowerBoundIncidents",
                confidenceUpperBoundColumn: "UpperBoundIncidents");

            SsaForecastingTransformer forecaster = forecastingPipeline.Fit(trainingYearData);

            Evaluate(evaluateYearData, forecaster, context);

            var forecastEngine = forecaster.CreateTimeSeriesEngine <ModelInput, ModelOutput>(context);

            forecastEngine.CheckPoint(context, "ML.IncidentAmountForecast.zip");

            Forecast(evaluateYearData, 7, forecastEngine, context);
        }
예제 #2
0
        static void Main(string[] args)
        {
            Console.WriteLine("Training time series analysis");
            //Step 1. Create a ML Context
            var ctx = new MLContext();

            string connectionString = "Data Source=localhost;Initial Catalog=kaggle_wallmart;Provider=SQLNCLI11.1;Integrated Security=SSPI;Auto Translate=False;";

            connectionString = "Server=localhost;Database=kaggle_wallmart;Integrated Security=True";

            string Query = @"
                SELECT 
                      CAST(X.[Value] AS REAL) AS [TotalSales],
                      CAST(Y.date AS DATE) AS [SalesDate],
	                  CAST(year(Y.date) AS REAL) As [Year]
                  FROM [dbo].[RAW_Train_Eval] AS X
                  INNER JOIN [dbo].RAW_Calendar AS Y ON Y.d=X.dCode
                  where Id='HOBBIES_1_278_CA_1_evaluation' 
                  order by 2

            ";

            Console.WriteLine("Connecting to the database...");
            //dbChecks dbchecks = new dbChecks();
            //dbchecks.ExecuteQuery(connectionString, Query);


            System.Data.SqlClient.SqlClientFactory newFactory = SqlClientFactory.Instance;
            Console.WriteLine("Loading data...");
            DatabaseSource dbSource = new DatabaseSource(SqlClientFactory.Instance, connectionString, Query);
            DatabaseLoader loader   = ctx.Data.CreateDatabaseLoader <ModelInput>();
            IDataView      dataView = loader.Load(dbSource);

            Console.WriteLine($"Loaded {dataView.GetRowCount()} rows...");

            IDataView trainingData   = ctx.Data.FilterRowsByColumn(dataView, "Year", upperBound: 2016);
            IDataView ValidationData = ctx.Data.FilterRowsByColumn(dataView, "Year", lowerBound: 2016);

            var forecastingPipeline = ctx.Forecasting.ForecastBySsa(
                outputColumnName: "ForecastedSales",
                inputColumnName: "TotalSales",
                windowSize: 7,
                seriesLength: 60,
                trainSize: 300,
                horizon: 30,
                confidenceLevel: 0.95f,
                confidenceLowerBoundColumn: "LowerBoundSales",
                confidenceUpperBoundColumn: "UpperBoundSales");
            SsaForecastingTransformer forecaster = forecastingPipeline.Fit(trainingData);

            Evaluate(ValidationData, forecaster, ctx);
            var forecastEngine = forecaster.CreateTimeSeriesEngine <ModelInput, ModelOutput>(ctx);

            forecastEngine.CheckPoint(ctx, "c:\\temp\\Model.zip");
            forecastEngine.CheckPoint(ctx, "C:\\Temp\\WallMartModels\\evaluation\\Model_HOBBIES_1_278_CA_1_evaluation.zip");
            Forecast(ValidationData, 7, forecastEngine, ctx);
            Console.WriteLine("Training time series analysis completed");
        }
예제 #3
0
        static void Main(string[] args)
        {
            string rootDir = Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "../../../"));
            //string dbFilePath = Path.Combine(rootDir, "Data", "DailyDemand.mdf");
            string modelPath = Path.Combine(rootDir, "MLModel.zip");
            //            var connectionString = $"Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename={dbFilePath};Integrated Security=True;Connect Timeout=30;";

            // you can use TblSmartAr.sql and able to make this table
            var connectionString = $"Data Source = (localdb)\\MSSQLLocalDB; Initial Catalog = Ar_Database; Integrated Security = True; Connect Timeout = 30; Encrypt = False; TrustServerCertificate = False; ApplicationIntent = ReadWrite; MultiSubnetFailover = False;";


            MLContext mlContext = new MLContext();

            DatabaseLoader loader = mlContext.Data.CreateDatabaseLoader <ModelInput>();

            string query = "SELECT Invoice_Date, CAST(Due_year as REAL) as Due_year, CAST(OverDue_Days as REAL) as OverDue_Days FROM TblSmartAR";

            DatabaseSource dbSource = new DatabaseSource(SqlClientFactory.Instance,
                                                         connectionString,
                                                         query);
            DateTime now = DateTime.Today;

            int thisyear = (now.Year);


            IDataView dataView = loader.Load(dbSource);

            IDataView firstYearData  = mlContext.Data.FilterRowsByColumn(dataView, "Due_year", upperBound: thisyear);
            IDataView secondYearData = mlContext.Data.FilterRowsByColumn(dataView, "Due_year", lowerBound: thisyear);

            var forecastingPipeline = mlContext.Forecasting.ForecastBySsa(
                outputColumnName: "ForecastedDays",
                inputColumnName: "OverDue_Days",
                windowSize: 80,
                seriesLength: 90,
                trainSize: 365,
                horizon: 80,
                confidenceLevel: .90f,
                confidenceLowerBoundColumn: "MinimumDays",
                confidenceUpperBoundColumn: "MaximumDays");

            SsaForecastingTransformer forecaster = forecastingPipeline.Fit(firstYearData);

            Evaluate(secondYearData, forecaster, mlContext);

            var forecastEngine = forecaster.CreateTimeSeriesEngine <ModelInput, ModelOutput>(mlContext);

            forecastEngine.CheckPoint(mlContext, modelPath);
            //foreach(var j in )
            //{
            //    if()
            //}

            Forecast(secondYearData, 40, forecastEngine, mlContext);

            Console.ReadKey();
        }
예제 #4
0
        static void Main(string[] args)
        {
            MLContext mlContext = new MLContext();
            IDataView data1View = mlContext.Data.LoadFromTextFile <ModelInput>(_data1Path, separatorChar: ',', hasHeader: false);
            IDataView data2View = mlContext.Data.LoadFromTextFile <ModelInput>(_data2Path, separatorChar: ',', hasHeader: false);

            var forecastingPipeline = mlContext.Forecasting.ForecastBySsa(
                outputColumnName: "forecasted_count",
                inputColumnName: "count",
                windowSize: 7,
                seriesLength: 30,
                trainSize: 334,
                horizon: 7,
                confidenceLevel: 0.95f,
                confidenceLowerBoundColumn: "lower_count",
                confidenceUpperBoundColumn: "upper_count");

            SsaForecastingTransformer forecaster = forecastingPipeline.Fit(data1View);

            Evaluate(data2View, forecaster, mlContext);

            var forecastEngine = forecaster.CreateTimeSeriesEngine <ModelInput, ModelOutput>(mlContext);
            //forecastEngine.CheckPoint(mlContext, modelPath);

            ModelOutput forecast = forecastEngine.Predict();

            IEnumerable <string> forecastOutput =
                mlContext.Data.CreateEnumerable <ModelInput>(data2View, reuseRowObject: false)
                .Take(7)
                .Select((ModelInput data, int index) =>
            {
                string action_date  = data.action_time.ToString("yyyy-MM-dd");
                float actual_count  = data.count;
                float lowerEstimate = Math.Max(0, forecast.lower_count[index]);
                float estimate      = forecast.forecasted_count[index];
                float upperEstimate = forecast.upper_count[index];
                return($"Date: {action_date}\n" +
                       $"Actual Count: {actual_count}\n" +
                       $"Lower Estimate: {lowerEstimate}\n" +
                       $"Forecast: {estimate}\n" +
                       $"Upper Estimate: {upperEstimate}\n");
            });

            Console.WriteLine("Forecast");
            Console.WriteLine("---------------------");
            foreach (var prediction in forecastOutput)
            {
                Console.WriteLine(prediction);
            }


            Console.ReadKey();
        }
예제 #5
0
        internal static void Start()
        {
            string rootDir          = Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "../../../", "BikeDemandForecasting"));
            string dbFilePath       = Path.Combine(rootDir, "Data", "DailyDemand.mdf");
            string modelPath        = Path.Combine(rootDir, "MLModel.zip");
            var    connectionString = $"Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename={dbFilePath};Integrated Security=True;Connect Timeout=30;";

            MLContext mlContext = new MLContext();

            string         query    = "SELECT RentalDate, CAST(Year as REAL) as Year, CAST(TotalRentals as REAL) as TotalRentals FROM Rentals";
            DatabaseSource dbSource = new DatabaseSource(SqlClientFactory.Instance, connectionString, query);
            DatabaseLoader loader   = mlContext.Data.CreateDatabaseLoader <ModelInput>();

            IDataView dataView = loader.Load(dbSource);

            /*
             * Набор данных содержит данные за два года. Для обучения используются только данные за первый год,
             * а данные за второй год откладываются для сравнения фактических значений с прогнозом, созданным
             * моделью. Отфильтруйте данные с помощью преобразования FilterRowsByColumn.
             */
            IDataView firstYearData  = mlContext.Data.FilterRowsByColumn(dataView, "Year", upperBound: 1);
            IDataView secondYearData = mlContext.Data.FilterRowsByColumn(dataView, "Year", lowerBound: 1);

            //Определите конвейер, который использует SsaForecastingEstimator для прогнозирования значений в наборе данных временных рядов
            var forecastingPipeline = mlContext.Forecasting.ForecastBySsa(
                outputColumnName: "ForecastedRentals",
                inputColumnName: "TotalRentals",
                windowSize: 7,
                seriesLength: 30,
                trainSize: 365,
                horizon: 7,
                confidenceLevel: 0.95f,
                confidenceLowerBoundColumn: "LowerBoundRentals",
                confidenceUpperBoundColumn: "UpperBoundRentals");

            //обучить модель и подогнать данные по ранее определенным forecastingPipeline.
            SsaForecastingTransformer forecaster = forecastingPipeline.Fit(firstYearData);

            //Оценка модели
            Evaluate(secondYearData, forecaster, mlContext);

            //создайте TimeSeriesPredictionEngine. TimeSeriesPredictionEngine — это удобный метод для создания единичных прогнозов
            var forecastEngine = forecaster.CreateTimeSeriesEngine <ModelInput, ModelOutput>(mlContext);

            //Сохраните модель в файл с именем MLModel.zip, которое задано ранее определенной переменной
            //modelPath. Выполните метод Checkpoint, чтобы сохранить модель.
            forecastEngine.CheckPoint(mlContext, modelPath);


            Forecast(secondYearData, 7, forecastEngine, mlContext);
        }
예제 #6
0
        static void Main(string[] args)
        {
            #region 定义相关路径
            string rootDir          = Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "../../../"));
            string dbFilePath       = Path.Combine(rootDir, "Data", "DailyDemand.mdf");
            string modelPath        = Path.Combine(rootDir, "MLModel.zip");
            var    connectionString = $"Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename={dbFilePath};Integrated Security=True;Connect Timeout=30;";
            #endregion
            //创建ML环境
            MLContext mlContext = new MLContext();
            //加载数据加载器
            DatabaseLoader loader = mlContext.Data.CreateDatabaseLoader <ModelInput>();
            //建立具有查询语句的数据源
            string         query    = "SELECT RentalDate, CAST(Year as REAL) as Year, CAST(TotalRentals as REAL) as TotalRentals FROM Rentals";
            DatabaseSource dbSource = new DatabaseSource(SqlClientFactory.Instance,
                                                         connectionString,
                                                         query);
            //使用加载器加载数据源
            IDataView dataView = loader.Load(dbSource);

            //获取第一年数据,用于训练,<1
            IDataView firstYearData = mlContext.Data.FilterRowsByColumn(dataView, "Year", upperBound: 1);
            //获取第二年数据,用于预测,>=1
            IDataView secondYearData = mlContext.Data.FilterRowsByColumn(dataView, "Year", lowerBound: 1);
            //训练模型
            var forecastingPipeline = mlContext.Forecasting.ForecastBySsa(
                outputColumnName: "ForecastedRentals",
                inputColumnName: "TotalRentals",
                windowSize: 7,                               //7条数据为一个时段分析
                seriesLength: 30,
                trainSize: 365,                              //获取365条数据
                horizon: 7,                                  //预测7个值
                confidenceLevel: 0.95f,                      //预测的值得是上下限范围内
                confidenceLowerBoundColumn: "LowerBoundRentals",
                confidenceUpperBoundColumn: "UpperBoundRentals");
            //开始训练
            SsaForecastingTransformer forecaster = forecastingPipeline.Fit(firstYearData);
            //进行评估
            Evaluate(secondYearData, forecaster, mlContext);
            //保存训练之后的模型,以用于其他项目
            var forecastEngine = forecaster.CreateTimeSeriesEngine <ModelInput, ModelOutput>(mlContext);
            forecastEngine.CheckPoint(mlContext, modelPath);
            //进行预测
            Forecast(secondYearData, 7, forecastEngine, mlContext);

            Console.WriteLine("Hello World!");
        }
예제 #7
0
        static void Main(string[] args)
        {
            string rootDir          = Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "../../../"));
            string dbFilePath       = Path.Combine(rootDir, "Data", "DailyDemand.mdf");
            string modelPath        = Path.Combine(rootDir, "MLModel.zip");
            var    connectionString = $"Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename={dbFilePath};Integrated Security=True;Connect Timeout=30;";

            MLContext mlContext = new MLContext();

            DatabaseLoader loader = mlContext.Data.CreateDatabaseLoader <ModelInput>();

            string query = "SELECT RentalDate, CAST(Year as REAL) as Year, CAST(TotalRentals as REAL) as TotalRentals FROM Rentals";

            DatabaseSource dbSource = new DatabaseSource(SqlClientFactory.Instance,
                                                         connectionString,
                                                         query);

            IDataView dataView = loader.Load(dbSource);


            IDataView firstYearData  = mlContext.Data.FilterRowsByColumn(dataView, "Year", upperBound: 1);
            IDataView secondYearData = mlContext.Data.FilterRowsByColumn(dataView, "Year", lowerBound: 1);


            var forecastingPipeline = mlContext.Forecasting.ForecastBySsa(
                outputColumnName: "ForecastedRentals",
                inputColumnName: "TotalRentals",
                windowSize: 7,
                seriesLength: 30,
                trainSize: 365,
                horizon: 7,
                confidenceLevel: 0.95f,
                confidenceLowerBoundColumn: "LowerBoundRentals",
                confidenceUpperBoundColumn: "UpperBoundRentals");

            SsaForecastingTransformer forecaster = forecastingPipeline.Fit(firstYearData);

            var forecastEngine = forecaster.CreateTimeSeriesEngine <ModelInput, ModelOutput>(mlContext);

            forecastEngine.CheckPoint(mlContext, modelPath);

            Forecast(secondYearData, 7, forecastEngine, mlContext);

            Console.ReadKey();
        }
예제 #8
0
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");

            string rootDir          = Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "../../../"));
            string dbFilePath       = Path.Combine(rootDir, "Data", "DailyDemand.mdf");
            string modelPath        = Path.Combine(rootDir, "MLModel.zip");
            var    connectionString = $"Server=localhost,1433;Database=master;User Id=sa;Password=Toffalini1991*;";

            MLContext mlContext = new MLContext();


            DatabaseLoader loader   = mlContext.Data.CreateDatabaseLoader <ModelInput>();
            string         query    = "SELECT RentalDate, CAST(Year as REAL) as Year, CAST(TotalRentals as REAL) as TotalRentals FROM Rentals";
            DatabaseSource dbSource = new DatabaseSource(SqlClientFactory.Instance,
                                                         connectionString,
                                                         query);
            IDataView dataView = loader.Load(dbSource);

            IDataView firstYearData  = mlContext.Data.FilterRowsByColumn(dataView, "Year", upperBound: 1);
            IDataView secondYearData = mlContext.Data.FilterRowsByColumn(dataView, "Year", lowerBound: 1);

            var forecastingPipeline = mlContext.Forecasting.ForecastBySsa(
                outputColumnName: "ForecastedRentals",
                inputColumnName: "TotalRentals",
                windowSize: 7,
                seriesLength: 30,
                trainSize: 365,
                horizon: 7,
                confidenceLevel: 0.95f,
                confidenceLowerBoundColumn: "LowerBoundRentals",
                confidenceUpperBoundColumn: "UpperBoundRentals");

            SsaForecastingTransformer forecaster = forecastingPipeline.Fit(firstYearData);

            Evaluate(secondYearData, forecaster, mlContext);

            var forecastEngine = forecaster.CreateTimeSeriesEngine <ModelInput, ModelOutput>(mlContext);

            forecastEngine.CheckPoint(mlContext, modelPath);
            Forecast(secondYearData, 7, forecastEngine, mlContext);
        }
예제 #9
0
        static void Main(string[] args)
        {
            MLContext _mlContext = new MLContext();

            string ConnectionString = "Data Source=146.59.229.11;Initial Catalog=Workshop;User ID=admin;Password=EPSIworkshop2020*";
            string rootDir          = Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "../../../"));
            string modelPath        = Path.Combine(rootDir, "Data", "MLModel.zip");

            string query = "SELECT f.matricule AS Feu, CAST(e.nbPassant as REAL) AS NbPassants, CAST(e.jour as REAL) AS Jour, CAST(e.numWeek as REAL) as Semaine " +
                           "FROM etat e " +
                           "INNER JOIN feu f ON e.idFeu = f.idFeu " +
                           "WHERE e.idFeu = 17 AND e.numWeek = 47";

            DatabaseLoader loader         = _mlContext.Data.CreateDatabaseLoader <ModelInput>();
            DatabaseSource databaseSource = new DatabaseSource(SqlClientFactory.Instance, ConnectionString, query);

            IDataView dataView      = loader.Load(databaseSource);
            IDataView firstWeekData = _mlContext.Data.FilterRowsByColumn(dataView, "Jour", upperBound: 1);
            IDataView nextWeekData  = _mlContext.Data.FilterRowsByColumn(dataView, "Jour", lowerBound: 1);

            var forecastingPipeline = _mlContext.Forecasting.ForecastBySsa(
                outputColumnName: "ForecastedPassants",
                inputColumnName: "NbPassants",
                windowSize: 7,
                seriesLength: 24,
                trainSize: 10079,
                horizon: 7,
                confidenceLevel: 0.95f,
                confidenceLowerBoundColumn: "LowerBoundPassants",
                confidenceUpperBoundColumn: "UpperBoundPassants");

            SsaForecastingTransformer forecaster = forecastingPipeline.Fit(firstWeekData);

            Evaluate(nextWeekData, forecaster, _mlContext);

            var forecastEngine = forecaster.CreateTimeSeriesEngine <ModelInput, ModelOutput>(_mlContext);

            forecastEngine.CheckPoint(_mlContext, modelPath);

            Forecast(nextWeekData, 4, forecastEngine, _mlContext);
        }
예제 #10
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="value">Close,High,Low,Open</param>
        public static ModelOutput CreateModel(string value)
        {
            // Load Data
            IDataView trainingDataView = mlContext.Data.LoadFromTextFile <ModelInput>(
                path: TRAIN_DATA_FILEPATH,
                hasHeader: true,
                separatorChar: ',',
                allowQuoting: true,
                allowSparse: false);

            var trainList = mlContext.Data.CreateEnumerable <ModelInput>(trainingDataView, true);
            int trainSize = trainList.Count();

            var testList = trainList.TakeLast(60);

            IDataView testDataView = mlContext.Data.LoadFromEnumerable(testList);

            var forecastingPipeline = mlContext.Forecasting.ForecastBySsa(
                outputColumnName: "ForecastedValue",
                inputColumnName: value,
                windowSize: 5,
                seriesLength: 60,
                trainSize: trainSize,
                horizon: 1,
                confidenceLevel: 0.95f,
                confidenceLowerBoundColumn: "LowerBoundValue",
                confidenceUpperBoundColumn: "UpperBoundValue");

            SsaForecastingTransformer forecaster = forecastingPipeline.Fit(trainingDataView);

            Evaluate(testDataView, forecaster, mlContext, value);

            var forecastEngine = forecaster.CreateTimeSeriesEngine <ModelInput, ModelOutput>(mlContext);

            forecastEngine.CheckPoint(mlContext, MODEL_FILE);

            return(Forecast(testList, 1, forecastEngine, mlContext, value));
        }
예제 #11
0
        private static void RunModel()
        {
            var modelRunner = new ModelRunner();

            var dataSource = JsonConvert.DeserializeObject <List <ModelRunner.ModelInput> >(File.ReadAllText(DataFileName));

            string modelPath = Path.Combine(ModelFileName);

            MLContext mlContext = new MLContext();
            IDataView dataView  = mlContext.Data.LoadFromEnumerable(dataSource);

            IDataView AllData      = mlContext.Data.FilterRowsByColumn(dataView, "YearInSeries", 0, 3);
            IDataView Year2017Data = mlContext.Data.FilterRowsByColumn(dataView, "YearInSeries", 2, 3);

            var forecastingPipeline = mlContext.Forecasting.ForecastBySsa(
                outputColumnName: "ForecastedTotalSold",
                inputColumnName: "TotalSold",
                windowSize: 30,
                seriesLength: 365,
                trainSize: 1095,
                horizon: 365,
                confidenceLevel: 0.95f,
                confidenceLowerBoundColumn: "LowerBoundTotalSold",
                confidenceUpperBoundColumn: "UpperBoundTotalSold");


            SsaForecastingTransformer forecaster = forecastingPipeline.Fit(AllData);

            modelRunner.Evaluate(Year2017Data, forecaster, mlContext);

            var forecastingEngine = forecaster.CreateTimeSeriesEngine <ModelRunner.ModelInput, ModelRunner.ModelOutput>(mlContext);

            forecastingEngine.CheckPoint(mlContext, modelPath);

            modelRunner.Forecast(Year2017Data, 365, forecastingEngine, mlContext);
        }