Хотя машинное обучение может быть сложным, оно также предлагает мощные инструменты для решения сложных задач и анализа больших и сложных наборов данных. Для развертывания машинного обучения компаниям нужны лучшие практики, процессы и инструменты, используемые для оптимизации и управления жизненным циклом моделей машинного обучения (ML). Это создает множество проблем, таких как сложность моделей машинного обучения, масштабируемость инфраструктуры, управление версиями моделей и данных, управление и соответствие нормативным требованиям. В дополнение к этому, аналитики, которые знают только SQL, нуждаются в острой кривой обучения, если они участвуют в проектах по науке о данных.

Snowflake упростила вам эту задачу благодаря новой функции под названием Функция ML. Эта функция позволяет обнаруживать закономерности в ваших данных с помощью встроенной модели, предоставляемой Snowflake. Вы можете обучить эту модель машинного обучения на своих данных, а затем предоставить прогнозы на основе тенденций в данных с помощью SQL. Вам не нужно иметь отдельную сложную инфраструктуру, и вы сможете предоставлять точные результаты быстро, масштабируемо и безопасно. Сегодня доступны следующие функции на основе машинного обучения: прогнозирование, обнаружение аномалий и исследование вклада, но позже появятся дополнительные функции.

Давайте посмотрим, как вы можете начать использовать его легко. В этом примере я использую данные об использовании электроэнергии для прогнозирования использования электроэнергии в моем доме. Я использую данные pge.com, которые можно загрузить в виде CSV-файла, только если вы живете в Северной Калифорнии. Здесь — это файл почасового использования данных, если у вас его нет.

  1. Загрузите данные в Snowflake: загрузите CSV-файл на внутреннюю сцену с помощью Snowsight или SnowSQL.
  2. Используйте схему вывода Snowflake для загрузки данных в таблицу
use role sysadmin;
use demodb.ml;
use warehouse demo_wh;

LIST @mldata;

CREATE OR REPLACE FILE FORMAT CSV_FF
  TYPE = csv
  PARSE_HEADER = true
  SKIP_HEADER = 1
  error_on_column_count_mismatch=false;
  
CREATE or REPLACE TABLE pge_data
  USING TEMPLATE (
    SELECT ARRAY_AGG(OBJECT_CONSTRUCT(*))
      FROM TABLE(
        INFER_SCHEMA(
         LOCATION=>'@mldata/pge_elec_data.csv'
      , FILE_FORMAT=>'csv_ff'
        )
      ));

DESC TABLE pge_data;

-- load data
COPY INTO pge_data FROM  @mldata/pge_elec_data.csv
FILE_FORMAT = (FORMAT_NAME= 'csv_ff') MATCH_BY_COLUMN_NAME=CASE_INSENSITIVE;

3. Тренируйтесь с вашим набором данных и прогнозируйте его

-- train model with your data
CREATE OR REPLACE snowflake.ml.forecast 
 electric_usage(input_data => SYSTEM$REFERENCE('VIEW', 'pge_data_vw'),                      
                              timestamp_colname => 'USAGE_DATE',
                              target_colname => 'DAILY_USAGE'
                );                                                    
-- get the predictions for next thirty days
CALL electric_usage!forecast(30);

--put it togater with existing and prediction
SELECT usage_date as ts, 
    daily_usage as actuals, 
    null as forecast, 
    null as lower_bound, 
    null as upper_bound 
FROM pge_data_vw 
UNION ALL
SELECT ts, null as actuals, forecast, lower_bound, upper_bound 
    FROM TABLE(RESULT_SCAN(-1))
ORDER BY 1;

-- change snowsight output to chart and add actuals, and forcast column

-- see which features are auto generated by the forecast algorithm
call electric_usage!explain_feature_importance();

4. Расширьте/улучшите свой прогноз с помощью данных торговой площадки Snowflake. Получите данные о погоде из Marketplace и используйте температуру и облачность, чтобы увидеть влияние солнечной генерации и использования электроэнергии. Убедитесь, что вы создали базу данных из следующего набора данных Marketplace и дали имя GLOBAL_WEATHER_DATA для использования в прогнозировании.

-- create view from marketplace data based on my area
create or replace view daily_weather_vw as select
    date_valid_std as wdate, 
    postal_code,
    AVG_CLOUD_COVER_TOT_PCT as cloud_cover,
    AVG_TEMPERATURE_AIR_2M_F as temperature
from global_Weather_data.standard_tile.history_day 
where postal_code = '94506';


-- join pge data with weather data based on date
create or replace view pge_weather_vw as select 
    pge.*,
    w.*
from pge_data_vw as pge left join daily_weather_vw as w
    on pge.usage_date = w.wdate;


-- create view to train the model based on past data, including weather
create or replace view pge_weather_data_vw as select 
    usage_date,
    daily_usage,
    cloud_cover,
    temperature
from pge_weather_vw;


-- create view based on weather forecast data from marketplace
create or replace view weather_forecast_data_vw as select
    to_timestamp_ntz(date_valid_std) as daily_timestamp, 
    AVG_CLOUD_COVER_TOT_PCT as cloud_cover,
    AVG_TEMPERATURE_AIR_2M_F as temperature
from global_Weather_data.standard_tile.forecast_day 
where postal_code = '94506';

-- check the data 
select * from pge_weather_data_vw  limit 10;
select * from weather_forecast_data_vw limit 10;

-- Train your model
create or replace snowflake.ml.stateful_forecast 
    electric_usage_weather(
      input_data => SYSTEM$REFERENCE('VIEW', 'pge_weather_data_vw'),               
      timestamp_colname => 'usage_date',
      target_colname => 'daily_usage'
);
-- Get predictions 
call electric_usage_weather!forecast
    (input_data => SYSTEM$REFERENCE('VIEW', 'weather_forecast_data_vw'),               
     timestamp_colname => 'daily_timestamp');

-- show output in chart

select usage_date as ts, 
  daily_usage as actuals, 
  null as forecast, 
  null as lower_bound, 
  null as upper_bound 
from pge_weather_data_vw 
union all
select ts, 
  null as actuals, 
  forecast, 
  lower_bound, 
  upper_bound 
from table(result_scan(-1));

В дополнение к этому, если у вас есть аномалия в ваших данных, вы можете легко обнаружить ее, используя аналогичную функцию, и исключить ее, чтобы обучить модель, чтобы получить наиболее точные результаты. Существует так много вариантов использования, один из них заключается в том, что вы можете использовать это для прогнозирования использования кредита Snowflake:

create or replace table snowflake_credit_history as
select  TO_TIMESTAMP_NTZ(usage_date)::timestamp as usage_date, 
        sum(credits_billed)::number credits
from snowflake.account_usage.metering_daily_history
group by all;

--create forecasting
create or replace snowflake.ml.forecast snow_credits
(  
      INPUT_DATA => SYSTEM$REFERENCE('TABLE','snowflake_credit_history'),
      TIMESTAMP_COLNAME => 'usage_date',
      TARGET_COLNAME => 'credits'
);

call snow_credits!FORECAST(FORECASTING_PERIODS => 30);   

Машинное обучение стало более доступным и удобным для пользователей на платформах Snowflake с использованием функций на основе машинного обучения. Любой разработчик SQL может выполнять машинное обучение в Snowflake.

Это еще не все, вдобавок к этому Snowflake также позволяет вам создать собственную модель машинного обучения или перенести любую модель машинного обучения с полным жизненным циклом машинного обучения в Snowflake.

Удачного машинного обучения!

Отказ от ответственности: мнения, выраженные в этом сообщении, являются моими собственными и не обязательно мнением моего работодателя (Снежинка).